종료하기 전에 시스템화된 원샷 서비스를 기다립니다.

종료하기 전에 시스템화된 원샷 서비스를 기다립니다.

시스템 타이머와 서비스를 사용하여 프로세스의 자동 실행을 설정하려고 합니다. 문제는 일회성 서비스가 종료되면 즉시 종료된다는 것입니다. 원샷 서비스를 종료하지 않고 종료하기 전에 완료될 때까지 기다리도록 systemd에 어떻게 지시합니까?

내 test.service는 다음과 같습니다.

[Unit]
Description=My automatic updates
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/sleep 40
TimeoutSec=0

답변1

그래서 나는 두 가지 가능한 해결책을 찾았습니다.

  1. TimeoutStopSec=infinity프로세스가 SIGTERM에 응답하지 않으면 TERM 신호를 무시하고 systemd를 방지하도록 SIGKILL을 설정하도록 스크립트에 지시합니다 . TERM 신호를 무시하려면 trapbash에서 사용하거나 Python에서 유사한 명령을 사용하면 됩니다.

    import signal
    def signal_handler(signum, frame):
      pass
    signal.signal(signal.SIGTERM, signal_handler)
    

    TERM 신호가 수신되면 가능한 한 빨리 스크립트를 종료하는 논리를 구현해야 합니다.

  2. 실행 파일을 수정할 수 없다면 KillSignal=비파괴적인 것으로 설정하십시오 SIGCONT(저는 이것을 해킹으로 간주하므로 권장하지 않습니다).

관련 정보