systemd를 사용하여 5분마다 명령을 실행하고 싶습니다. 그러나 작업 실행 시간이 때때로 5분을 초과할 위험이 있습니다. 그 시점에서 systemd는 명령의 두 번째 인스턴스를 시작합니까? 즉, 2개의 프로세스를 실행하게 됩니까?
첫 번째 프로세스가 아직 완료되지 않은 경우 systemd에게 두 번째 프로세스를 시작하지 않도록 지시할 수 있습니까? 그렇지 않다면 좋은 해결책은 무엇입니까?
참고: "이것은 기본 동작입니다. 문서화되지 않았습니다."라고 대답하고 싶습니다. 그렇다면 누군가 문서에 버그를 신고하는 방법을 알려줄 수 있습니까?
참고: Cron에도 비슷한 문제가 있습니다.https://unix.stackexchange.com/a/173928/11244. 나는 systemd와 동등한 것을 찾고 있습니다.
답변1
이것이 기본(유일한) 동작입니다. 명시적으로 문서화되지는 않았지만 systemd의 운영 논리에 의해 암시됩니다.
systemd.timer(5)내용은 다음과 같습니다.
각 타이머 파일에는 해당 단위를 설명하는 일치하는 단위 파일이 있어야 합니다.타이머가 만료되면 활성화.
시스템(1)차례로, 단위 상태의 개념과 그 사이의 전환이 설명됩니다.
장치는 "활성"(시작됨, 바인딩됨, 연결됨...을 의미, 장치 유형에 따라 아래 참조) 또는 "비활성"(중지됨, 바인딩 해제됨, 연결 해제됨...을 의미)일 수 있습니다.활성화 또는 비활성화 중에도, 즉 두 상태 사이(이러한 상태를 "활성화" 및 "비활성화"라고 함)입니다.
이는 타이머의 작동으로 인해 일치하는 장치가 "활성화"됩니다. 즉, "활성" 상태로 전환됩니다.
일치하는 단위가 "활성화"되었을 때 이미 "활성"인 경우(서비스 단위의 경우 이는 서비스 단위에 Type=oneshot
및 가 없으면 "주 프로세스가 여전히 실행 중"임을 의미함 RemainAfterExit=true
) 분명히 아무 조치도 취하지 않습니다.
답변2
방금 테스트해보니 장치가 부팅되는 것 같습니다.곧마지막 실행이 완료된 후 이전 실행이 아직 완료되지 않은 동안 장치가 시작되도록 예약된 경우. 나는 그 실행을 무시하고 다음 타이머 호출을 기다리기를 원합니다.