私のシステムにはいくつかのシステムサービスがあります。これらのサービスがすべて実行されている限り、私のシステムは「実行中」と見なされますa.service
。z.service
このステータスは、デバイスステータスLEDのどこかに表示する必要があります。そのために、私は次のことsystem-status.service
を行う別のシステムサービスを使用することを考えました。
- すべてのサービスが
active
実行中としてマークされている場合 - サービスがクラッシュ/停止すると、そのサービスが実行されていないことを示します。
この不完全なコードスニペットを使用すると、system-status.service
次のいずれかの場合を除いて正常に動作します。
[Unit]
BindsTo=a.service
BindsTo=b.service
...
After=a.service
After=b.service
...
[Service]
ExecStart=/usr/bin/indicate-running.sh
ExecStop=/usr/bin/indicate-stopped.sh
しかし、a.service
ラインが含まれてクラッシュRestart=always
が発生するとa.service
(シミュレーションを通じてkill -9
)、a.service
再起動は成功しますsystem-status.service
が失敗します!
kill -9 <a.pid>
どんなアイデアがありますか?ありがとうございます!
答え1
必要なのはWants=system-status.service
との関係です。これら2つのサービスのオーバーライドを追加したくない場合は、インストールセクションに逆関係を追加する必要があります。a.service
b.service
system-status.service
...
[Install]
WantedBy=a.service
WantedBy=b.service
このセクションを適用するにはsystemctl enable system-status.service
再実行する必要があります。