systemdサービスを終了したときに失敗したデバッグ通知を送信する

systemdサービスを終了したときに失敗したデバッグ通知を送信する

サービスAとサービスBという2つのサービスがあります。サービスAはタイプnotify、サービスBはタイプですsimple。サービスBは、After=serviceA.serviceサービスAが準備されたことを通知した後にのみサービスBが開始されるように設定される。

通知を送信しない、またはエラー(例:)を含む通知を送信せずにサービスAがゼロ以外のコードで終了する状況を確認していますERRNO=2。サービスBはサービスAが実行されるのを待つが、サービスAが失敗するとすぐにサービスBが実行を開始する。サービスBはサービスAがREADY=1。サービスBが実行を開始するようにトリガーする通知をデバッグするにはどうすればよいですか?この動作も予想されますか?

ベストアンサー1

~からman systemd.unit:

以降 =

... After=設定されたデバイスが起動する前に、リストされているデバイスが完全に起動していることを確認します。 ...設定されたすべての起動コマンドが呼び出され、そのコマンドが失敗した場合、または成功した起動を報告した場合、起動は完了したと見なされます。

したがって、After=依存関係は serviceA が正常に開始または失敗した後に serviceB を開始します。

あなたが探しているのは、次の組み合わせです。

After=serviceA
Requires=serviceA

~からman systemd.unit:

必要=

...このユニットがアクティブになると、リストされたユニットもアクティブになります。他のデバイスのいずれかがアクティブではなく、注文の依存関係After =が失敗したデバイスに設定されている場合、そのデバイスは起動しません。

これには、閉じるロジックに関連するいくつかの追加のトリックがあります。 serviceA が正常に完了すると、serviceB は引き続き実行されます。 serviceA が明示的に停止または再始動されると、serviceB も停止または再始動されます。

serviceAが自然に停止したときにserviceBがシャットダウンされるようにするには、BindTo=依存関係を使用します。

おすすめ記事