回答:
systemd.unit(5)に記載さOnFailure=
れているセクション[Unit]
にディレクティブがあります。次のように定義されます。
このユニットが「障害」状態になったときにアクティブになる1つ以上のユニットのスペース区切りリスト。
(OnFailureJobMode=
同じセクションに、OnFailure =ユニットをアクティブにするためのジョブモードを設定できるディレクティブもあります。)
/etc/systemd/system
その下に配置して、その名前をOnFailure=
ディレクティブに配置します。
ExecStopPost
ユニットを開始する代わりに、コマンドを直接実行することもできます。
OnFailure
設定に満足できなかったので、探し続けましたExecStopPost
。
次の実際の例では、メインタスクが失敗した場合、systemdがgit
コマンドを実行します。
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost =サービスの停止後に実行される追加のコマンド。これには、ExecStop =で構成されたコマンドが使用された場合、サービスにExecStop =が定義されていない場合、またはサービスが予期せず終了した場合が含まれます。この引数は、ExecStart =で説明したのと同じスキームに従って、複数のコマンドラインを取ります。これらの設定の使用はオプションです。指定子と環境変数の置換がサポートされています。– ExecStop =とは異なり–この設定で指定されたコマンドは、サービスが正しく起動できず、再びシャットダウンされたときに呼び出されます。
この設定は、サービスが正常に起動しなかった場合でも実行されるクリーンアップ操作に使用することをお勧めします。この設定で構成されたコマンドは、サービスが途中で起動に失敗し、不完全に初期化されたデータが残った場合でも動作できる必要があります。サービスのプロセスは、この設定で指定されたコマンドが実行されたときにすでに終了しているため、それらとの通信を試みるべきではありません。
この設定で構成されるすべてのコマンドは、サービスの結果コード、およびメインプロセスの終了コードとステータスで呼び出され、$ SERVICE_RESULT、$ EXIT_CODE、および$ EXIT_STATUS環境変数で設定されます。systemd.execを参照してください。 (5)詳細については。