시스템 타이머와 서비스를 사용하여 프로세스의 자동 실행을 설정하려고 합니다. 문제는 일회성 서비스가 종료되면 즉시 종료된다는 것입니다. 원샷 서비스를 종료하지 않고 종료하기 전에 완료될 때까지 기다리도록 systemd에 어떻게 지시합니까?
내 test.service는 다음과 같습니다.
[Unit]
Description=My automatic updates
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/sleep 40
TimeoutSec=0
답변1
그래서 나는 두 가지 가능한 해결책을 찾았습니다.
TimeoutStopSec=infinity
프로세스가 SIGTERM에 응답하지 않으면 TERM 신호를 무시하고 systemd를 방지하도록 SIGKILL을 설정하도록 스크립트에 지시합니다 . TERM 신호를 무시하려면trap
bash에서 사용하거나 Python에서 유사한 명령을 사용하면 됩니다.import signal def signal_handler(signum, frame): pass signal.signal(signal.SIGTERM, signal_handler)
TERM 신호가 수신되면 가능한 한 빨리 스크립트를 종료하는 논리를 구현해야 합니다.
실행 파일을 수정할 수 없다면
KillSignal=
비파괴적인 것으로 설정하십시오SIGCONT
(저는 이것을 해킹으로 간주하므로 권장하지 않습니다).