モジュール間のシステム依存関係は対称でなければなりませんか?

モジュール間のシステム依存関係は対称でなければなりませんか?

AとBという2つのモジュールがあるとしましょう。 Bより先にAを始めたいです。

  1. 1つの設定ファイルで十分ですか?
[Unit]
Before=B
  1. B 設定ファイルだけで十分ですか?
[Unit]
Requires=A
After=A
  1. それとも、両方のファイルで依存関係を対称的に定義する必要がありますか?

構成A

[Unit]
Before=B

構成B

[Unit]
Requires=A
After=A

推奨事項と最小事例は何ですか?

答え1

はい、1つで十分です(両方)。

あなたが長年モジュールBを使用してきたと想像してください。その後、突然追加のモジュールAを作成します。さらに、Bはすでにメンテナンスされていないモジュールでも、モジュールBが外部で管理している商用製品でも、ライセンスの観点から構成変更が禁止されることもあります。

Aモジュールでも同じ問題が発生する可能性があるので、Bモジュールだけを制御すればよいのですが...

3番目、4番目などのモジュールをミックスに混ぜると、別の問題が発生する可能性があります。対称的な変更を維持することは非常に複雑になる可能性があります。

答え2

ホワイトフクロウは次のように正しく指摘しています。

Before=Aで定義されている場合はB.service指定する必要はありませんAfter=BA.service

この答えは、これを説明するいくつかの文書を提供します。

After=との関係はBefore=「逆属性」ということです。Before=「forward」属性の場合は「After=reverse」属性です。

man systemd.unitこれを説明します。

2 番目のデバイスとの関係を生成するデバイス設定は、通常、systemctl show 出力など、2 つのデバイスのプロパティに表示されます。場合によっては、属性名は構成設定名と同じですが、必ずしもそうではありません。この表には、いくつかの依存関係でリンクされている2つのセルに表示される属性がリストされており、「ソース」セルのどの属性が「ターゲット」セルのどの属性に対応するかを示しています。

その後、マニュアルページはすべての順方向/逆方向関係を含むテーブルを提供します。

「転送」プロパティ 「逆方向」属性 使用場所 使用場所(逆方向)
前= 以降 = [単位]セクション
以降 = 前= [単位]セクション
必要= 必須= [単位]セクション [インストール]セクション
欲しい= 欲しい人= [単位]セクション [インストール]セクション
部分= 設定= [単位]セクション 自動属性
=に縛る バインディング= [単位]セクション 自動属性
前提条件= 前提条件= [単位]セクション 自動属性
トリガー= トリガー= 自動属性、下記の注意事項を参照
紛争= 紛争= [単位]セクション 自動属性
再装填拡散= =から電波を再読み込み [単位]セクション
=から電波を再読み込み 再装填拡散=
フォロー= 該当なし 自動属性

したがって、WantedBy=このセクション[Install]の設定はWants=選択したデバイスとの関係を生成します。

関連情報