まれに、Type=simple
システムサービスが中断したりループに閉じ込めたりする問題が発生しました。これにより、タイマーがサービスの予約を停止します。これは、サービスで確認されているように、sudo systemctl status myservice
サービスが長い時間前に終了する必要がある場合はまだ実行中であるためです。まだエラーを把握していませんが、問題ではありません。しかし、同時に今後の実行スケジュールを中断したくありません。
システムサービスファイルで強制終了される最大実行時間を指定する方法はありますか?
[Unit]
Description=scripts should run and exit but occasionally hangs or infinite loop
[Service]
SyslogIdentifier=myservice
Environment='MYVAR=myvar'
User=deanresin
Type=simple
ExecStart=/usr/bin/python3 /home/deanresin/myscript
答え1
TimeoutStartSec
使用すべきコメントで@muruが述べたように、終了する必要があるスクリプトを実行する正しい方法Type=oneshot
はType=simple
。
たとえば、スクリプトが通常10秒以内に実行される場合、構成は次のようになります。
[Service]
Type=oneshot
TimeoutStartSec=10
SyslogIdentifier=myservice
Environment='MYVAR=myvar'
User=deanresin
ExecStart=/usr/bin/python3 /home/deanresin/myscript
スクリプトの実行に10秒以上かかると、スクリプトが終了し、サービスが失敗したと表示されます。