私はそれぞれサービスを実行する複数のLinuxシステムを持っています。これは、これらのシステムで実行される唯一の重要なプロセスです。ただし、サービスの一部の内部状態の変更により、終了コード 0 で正常に停止することがあります。私が探しているのは、これが起こったときにシステム全体をシャットダウンする慣用的な方法です。デフォルトでは、myserviceがコード0で終了した場合、systemdはシステムを停止し、myserviceが0以外の結果コードで終了した場合はmyserviceを再起動したいと思います。
見つけることができるショートカットがありますか?
答え1
/etc/systemd/system/my_unit.service
:
[Unit]
...
...
[Service]
Type=oneshot
ExecStart=/usr/bin/your_program
ExecStartPost=/usr/bin/systemctl poweroff
RestartSec=5
Restart=on-failure
[Install]
...
...
これはとても簡単です。もう一つの興味深い変数はman systemd.service
およびですman systemd.unit
。
答え2
[Unit]
...
[Service]
Type=exec # or any other type you want, apart from "oneshot"
ExecStart=/usr/bin/your_program
ExecStopPost=/bin/sh -c \
'if [ "$SERVICE_RESULT" = "success" ]; then systemctl poweroff; fi'
RestartSec=5
Restart=on-failure
お客様のサービスが以下を使用して作成されたType=oneshot
場合オーダーの回答代わりに。Type=oneshot
長期実行サービスの場合、これは非常に「慣用的」ではない可能性があります。プログラムが実行中の場合、そのサービスの状態は「実行中」ではなく「開始中」と表示されます。
これらのパターンのどれも非常にエレガントではありませんが、書くのはとても簡単でうまくいくと思います:-).