프로세스가 아직 완료되지 않은 경우 시스템 타이머 장치가 다음 실행을 건너 뛰나요?


18

systemd를 사용하여 5 분마다 명령을 실행하고 싶습니다. 그러나 때때로 작업을 실행하는 데 5 분 이상 걸릴 수있는 위험이 있습니다. 그 시점에서 systemd는 명령의 두 번째 인스턴스를 시작합니까? 즉, 2 개의 프로세스가 실행 중입니까?

첫 번째 프로세스가 완료되지 않은 경우 systemd에게 두 번째 프로세스를 시작하지 않도록 지시 할 수 있습니까? 그렇지 않은 경우 좋은 해결 방법은 무엇입니까?

참고 : 답변이 "기본 동작입니다. 문서화되어 있지 않습니다." 이것이 상황이라면 누군가가 문서에 버그를 신고하는 방법을 말해 줄 수 있습니까?

참고 : Cron은 /unix//a/173928/11244 에서 논의 된 비슷한 문제가 있습니다 . 나는 시스템과 동등한 것을 찾고 있습니다.

답변:


27

이것이 기본 (및 유일한) 동작입니다. 명시 적으로 문서화되어 있지는 않지만 systemd의 작동 논리에 의해 암시됩니다.

systemd.timer (5)는 다음을 읽습니다.

각 타이머 파일에 대해 일치하는 단위 파일이 있어야 타이머가 경과 할 때 활성화 할 단위 설명합니다 .

systemd (1) 은 단위 상태의 개념과 이들 사이의 전이를 설명합니다.

장치는 "활성"(장치 유형에 따라 시작, 바인드, 연결됨, ..., 아래 참조) 또는 "비활성"(중지, 언 바운드, 연결 해제 됨 등) 일 수 있습니다. 활성화 또는 비활성화되는 프로세스 , 즉 두 상태 사이 (이러한 상태를 "활성화", "비활성화"라고 함).

이것은 타이머의 트리거링이 매칭 유닛의 "활성화", 즉 "활성화"상태로의 전환으로 이어진다는 것을 의미한다.

일치하는 장치가 "활성화"시 이미 "활성"인 경우 (서비스 유닛이 수단은 서비스 장치가하지 않는 한, "주요 프로세스가 계속 실행되고" Type=oneshotRemainAfterExit=true, 아무런 조치가 없을 것이라는 점을 명백해야한다) 찍은.


"oneshot"서비스를 명확히 할 수 있습니까? 제 생각에 "원샷"서비스는 어떤 상황에서도 다른 사본을 실행해서는 안됩니다 (맨 페이지 : 시스템이 후속 장치를 시작하기 전에 프로세스가 종료되어야 함)
Gima

1
@Gima 추가 매개 변수가없는 oneshot 장치는 초기 프로세스가 실행되는 동안 "활성화"된 것으로 간주되고 종료되면 "비활성"이됩니다. 이때 다른 트리거가 해당 장치를 다시 활성화 할 수 있습니다.
intelfx

1
@Gima ... 단, RemainAfterExit=true초기 프로세스가 종료 될 때 "활성"상태로 유지 되는 oneshot 단위 이므로 관리자가 해당 단위를 명시 적으로 비활성화 (중지)하거나 부정적인 것으로 중단하지 않으면 타이머의 후속 트리거는 무시됩니다. 의존성.
intelfx

1
사람들이 이걸 초대하면 계속 연락을받습니다. systemd가 문서를 명확히하지 않기를 바랍니다.
TomOnTime

1
이것은 이제 시스템 문서의 일부입니다 Note that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case. -freedesktop.org/software/systemd/man/systemd.timer.html
Sam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.