web-dev-qa-db-ja.com

クラッシュ後にのみsystemdがサービスを自動的に再起動する

サービスが0を返さなかった場合にのみ、systemdにサービスを自動的に再起動させることはできますか?私が理解している限り、正しい終了が発生した場合、たとえばユーザーがプログラムを閉じるようにサービスをアクティブに終了した場合など、サービスは0を返します。 systemdにサービスを手動で終了したときに、サービスを再起動しないように伝えたいです。それは可能ですか?

5
bejo

はい、ユニットの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=設定がバイパスされます。

4
Chris Down