
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@ex2
serv@ex3
Conflicts=
Before=
注 2: また、およびAfter=
ディレクティブを使用して、3 つのインスタンスを階層化し、特定の順序で起動できることもわかっています。
答え1
ご指摘のとおり、ディレクティブを使用してサービスを相互に排他的にすることができますConflicts=
。systemd
ターゲットはユニットをグループ化する方法にすぎず、複雑な依存関係オプションはありません。
名前が「.target」で終わるユニット設定ファイルは、ユニットをグループ化したり、起動時に既知の同期ポイントとして使用される systemd のターゲット ユニットに関する情報をエンコードします。
このユニットタイプには特定のオプションはありません。すべてのユニット設定ファイルの共通オプションについては、systemd.unit(5) を参照してください。共通の設定項目は、汎用の [Unit] セクションと [Install] セクションで設定されます。ターゲット固有のオプションは設定できないため、個別の [Target] セクションは存在しません。
システムユニット参考のため。
に含まれるディレクティブのみ使用できsystemd.unit
、複数のサービスのうち 1 つのサービスだけを起動する方法は含まれていません。