너무 오랫동안 실행 중인 경우 systemd 서비스를 다시 시작하는 방법은 무엇입니까?

너무 오랫동안 실행 중인 경우 systemd 서비스를 다시 시작하는 방법은 무엇입니까?

나는 일주일에 한 번 느리고 버그가 있는 일회성 프로그램을 실행하는 서비스를 가지고 있는데, 때때로 뚜렷한 이유 없이 중단될 수 있습니다. 서비스가 4시간 이상 실행 중이면 서비스를 다시 시작하고 싶습니다. 4시간 후에 다시 시작하도록 설정해 보았습니다(다음 단위 정의로 계속 실행 중인 경우).

[Unit]
Description=Some buggy software

[Service]
WorkingDirectory=/home/buggy
ExecStart=/home/buggy/run
Environment=NODE_VERSION=14
Restart=on-failure
RestartSec=4 h
StartLimitBurst=4
StartLimitInterval=1 s

타이머도 있습니다:

[Unit]
Description=Some buggy software schedule timer

[Timer]
Unit=buggy.service
OnCalendar=Sat *-*-* 22:00:00

[Install]
WantedBy=timers.target

하지만 여전히 무기한 정지 상태입니다. 이틀 동안 실행한 후 서비스를 확인했는데 여전히 정지 상태입니다.

내가 뭘 잘못했나요? systemd를 사용하여 필요한 작업을 수행할 수 있는 방법이 있나요?

답변1

RuntimeMaxSec 지시문을 사용하십시오. 결함이 있는 프로그램을 수정해야 하기 때문에 Watchdog을 사용할 수 없습니다.

~에서man systemd.service:

RuntimeMaxSec=

서비스가 실행되는 최대 시간을 구성합니다. 이 기능을 사용하고 지정된 시간보다 오랫동안 서비스가 활성화되면 서비스가 종료되고 오류 상태가 됩니다. Type=oneshot서비스는 활성화가 완료되는 즉시 종료되므로 이 설정은 서비스에 영향을 미치지 않습니다 . infinity런타임 제한을 구성하지 않으려면 통과 (기본값)입니다.

Type=notify/가 서비스 Type=notify-reload에 의해 전송 되면 EXTEND_TIMEOUT_USEC=...런타임이 연장될 수 있습니다 RuntimeMaxSec=. 이 메시지의 첫 번째 수신은 RuntimeMaxSec=런타임이 초과되기 전에 발생해야 하며, 런타임이 초과되면 서비스 관리자는 서비스가 종료될 때까지 지정된 간격으로 서비스가 반복되는 경우 서비스 RuntimeMaxSec=가 계속 실행되도록 허용합니다. (또는 종료 중 ) . (바라보다 ).EXTEND_TIMEOUT_USEC=...STOPPING=1sd_notify(3)

관련 정보