サービスが0を返さなかった場合にのみ、systemdにサービスを自動的に再起動させることはできますか?私が理解している限り、正しい終了が発生した場合、たとえばユーザーがプログラムを閉じるようにサービスをアクティブに終了した場合など、サービスは0を返します。 systemdにサービスを手動で終了したときに、サービスを再起動しないように伝えたいです。それは可能ですか?
はい、ユニットのService
セクション内でRestart=on-failure
を使用できます。
systemd's documentation から(man 5 systemd.service
でも入手可能):
再起動=
[...]
on-failure
に設定すると、プロセスがゼロ以外の終了コードで終了したときにサービスが再起動され、シグナル(コアダンプを含むが、前述の4つのシグナルを除く)によって操作( as service reload)がタイムアウトし、設定されたウォッチドッグタイムアウトがトリガーされたとき。 on-abnormalに設定すると、プロセスがシグナル(コアダンプを含む、前述の4つのシグナルを除く)によって終了したとき、操作がタイムアウトしたとき、またはウォッチドッグタイムアウトがトリガーされたときに、サービスが再起動されます。[...]
これを
on-failure
に設定することは、エラーからの自動回復を試行して信頼性を高めるために、長時間実行サービスの推奨される選択です。独自の選択で終了できる(そしてすぐに再起動しないようにする)サービスの場合、on-abnormal
が代わりの選択肢になります。
余談ですが、手動でプロセスを終了する現在の方法の代わりに、systemctl stop
を使用してサービスを停止するようにsystemdに明示的に指示できます。これにより、Restart=
設定がバイパスされます。