![너무 오랫동안 실행 중인 경우 systemd 서비스를 다시 시작하는 방법은 무엇입니까?](https://linux55.com/image/224875/%EB%84%88%EB%AC%B4%20%EC%98%A4%EB%9E%AB%EB%8F%99%EC%95%88%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%EA%B2%BD%EC%9A%B0%20systemd%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 일주일에 한 번 느리고 버그가 있는 일회성 프로그램을 실행하는 서비스를 가지고 있는데, 때때로 뚜렷한 이유 없이 중단될 수 있습니다. 서비스가 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을 사용할 수 없습니다.
RuntimeMaxSec=
서비스가 실행되는 최대 시간을 구성합니다. 이 기능을 사용하고 지정된 시간보다 오랫동안 서비스가 활성화되면 서비스가 종료되고 오류 상태가 됩니다.
Type=oneshot
서비스는 활성화가 완료되는 즉시 종료되므로 이 설정은 서비스에 영향을 미치지 않습니다 .infinity
런타임 제한을 구성하지 않으려면 통과 (기본값)입니다.
Type=notify
/가 서비스Type=notify-reload
에 의해 전송 되면EXTEND_TIMEOUT_USEC=...
런타임이 연장될 수 있습니다RuntimeMaxSec=
. 이 메시지의 첫 번째 수신은RuntimeMaxSec=
런타임이 초과되기 전에 발생해야 하며, 런타임이 초과되면 서비스 관리자는 서비스가 종료될 때까지 지정된 간격으로 서비스가 반복되는 경우 서비스RuntimeMaxSec=
가 계속 실행되도록 허용합니다. (또는 종료 중 ) . (바라보다 ).EXTEND_TIMEOUT_USEC=...
STOPPING=1
sd_notify(3)