ターゲットがいずれかの要件を満たしていることを systemd に伝えるにはどうすればよいでしょうか?

ターゲットがいずれかの要件を満たしていることを systemd に伝えるにはどうすればよいでしょうか?

systemdインスタンスのリストにあるいずれかのインスタンスで要件が満たされていることをどのように判断しますか?

というターゲットmain_target.targetと というサービス テンプレートがあるとします。通常の操作中、存在する[email protected]のインスタンスは次のものだけです。[email protected]

  • serv@ex1
  • serv@ex2
  • serv@ex3

のみ1つこれらのインスタンスはいつでも存在し、main_target.targetそれが満たされていることを伝えたいのですどれでも3 つのインスタンスが存在します。

直感的には、SMF のタグに似たものが欲しいのですrequire_anyが、どのsystemdドキュメントにもそのようなものを見つけることができませんでした。

注 1: 、、serv@ex1をディレクティブと相互に排他的にできることはわかっています。serv@ex2serv@ex3Conflicts=

Before=注 2: また、およびAfter=ディレクティブを使用して、3 つのインスタンスを階層化し、特定の順序で起動できることもわかっています。

答え1

ご指摘のとおり、ディレクティブを使用してサービスを相互に排他的にすることができますConflicts=systemdターゲットはユニットをグループ化する方法にすぎず、複雑な依存関係オプションはありません。

systemd.ターゲット

名前が「.target」で終わるユニット設定ファイルは、ユニットをグループ化したり、起動時に既知の同期ポイントとして使用される systemd のターゲット ユニットに関する情報をエンコードします。

このユニットタイプには特定のオプションはありません。すべてのユニット設定ファイルの共通オプションについては、systemd.unit(5) を参照してください。共通の設定項目は、汎用の [Unit] セクションと [Install] セクションで設定されます。ターゲット固有のオプションは設定できないため、個別の [Target] セクションは存在しません。

システムユニット参考のため。

に含まれるディレクティブのみ使用できsystemd.unit、複数のサービスのうち 1 つのサービスだけを起動する方法は含まれていません。

関連情報