終了する前に、システム化されたワンショットサービスを待ちます。

終了する前に、システム化されたワンショットサービスを待ちます。

システムタイマーとサービスを使用してプロセスの自動実行を設定しようとしています。問題は、ワンタイムサービスが終了するとすぐに終了することです。ワンショットサービスを終了せずに終了する前に完了するのを待つようにsystemdにどのように指示しますか?

私のtest.serviceは次のようになります。

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

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

答え1

だから私は2つの可能な解決策を見つけました。

  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(私はこれをハッキングと見なすので推奨しません)。

関連情報