systemd에서 프로세스 중지와 시작 사이에 지연을 추가합니다.

systemd에서 프로세스 중지와 시작 사이에 지연을 추가합니다.

매우 이상한 문제가 있습니다 systemd. 메시지를 발행하면 systemctl restart이전 프로세스가 완료되기 전에 새 프로세스가 시작됩니다.

이는 시작 메시지("로그 온") 다음에 최종 종료 메시지("로그 오프")가 기록되는 로그에서 확인할 수 있습니다.

프로세스 중지와 시작 사이에 지연을 추가하는 방법이 있습니까?

답변1

시스템 서비스 파일에서 RestartSec 옵션을 설정하여 재시작 지연을 추가할 수 있습니다. 아래 예를 참조하세요.

[Service]
Restart=always
RestartSec=30

이 링크를 확인하세요더 많은 예시를 알아보세요.

답변2

RestartSec는 systemctl restart 명령을 통해 특정 서비스를 다시 시작할 때만 사용되는 것 같습니다.

예를 들어 A와 B라는 두 가지 서비스가 있습니다.

[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always

그리고

[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30

systemctl restart B를 수행하면 예상대로 작동하지만... systemctl restart A를 수행하면 두 서비스 모두 지연 없이 즉시 중지되었다가 다시 시작됩니다.

Systemd는 분명히 사용자가 지정한 한 서비스의 구성 값만 사용하고 해당 서비스에 대한 종속성을 무시합니다.

이것은 들리는 것만큼 드물지 않습니다. B가 원격 서버와 통신하는 경우 원격 측에서 클라이언트를 거부하므로 빠른 시작 및 중지가 실패할 수 있습니다. 그러나 A가 업데이트되고 B가 변경되지 않는 한 A는 직접 다시 시작됩니다.

A에 지연을 추가하여 이 문제를 해결할 수도 있지만 B가 종속성이 아닐 때 A가 B를 인식하도록 하여 객체 격리를 깨기 때문에 그렇게 할 필요가 없습니다.

답변3

ExecStopPost서비스가 중지된 후 명령을 실행할 수 있는 를 사용할 수 있습니다 .

ExecStopPost=/bin/sleep 5

그런 다음 서비스가 중지될 때마다(수동 다시 시작 또는 서비스 종료 포함) 5초 동안 기다립니다. 정지 후 5초 이내에는 시작되지 않습니다.

관련 정보