システムタイマーとサービスを使用してプロセスの自動実行を設定しようとしています。問題は、ワンタイムサービスが終了するとすぐに終了することです。ワンショットサービスを終了せずに終了する前に完了するのを待つようにsystemdにどのように指示しますか?
私のtest.serviceは次のようになります。
[Unit]
Description=My automatic updates
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/sleep 40
TimeoutSec=0
答え1
だから私は2つの可能な解決策を見つけました。
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
(私はこれをハッキングと見なすので推奨しません)。