存在するこの例システム単位ファイル:
# systemd-timesyncd.service
...
Before=time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target
Wants=time-sync.target
systemd-timesyncd.service
始めなければならない今後 time-sync.target
。これは注文依存性。
しかし同時にsystemd-timesyncd.service
〜したい time-sync.target
。time-sync.target
そちらも同じだよ要件の依存関係
この関係のユースケースは何ですか?なぜ彼らは互いに衝突しないのですか?
答え1
この二重関係のユースケースは、「提供」関係と似ています。systemd-timesyncd
デバイスペアへのすべての依存関係を満たすために時間同期サービスを提供しますtime-sync.target
。時間同期に依存するすべてのサービスに必要なので、これを開始する必要があります。時間同期に依存するすべてのデバイスはサービスで開始する必要があるためtime-sync.target
必要です。time-sync.target
systemd-timesyncd
このような誤解は「欲しい」の理解から始まったようです。 systemdの「欲しい」関係は依存関係ではありません。動作するsystemd-timesyncd
必要はありません。time-sync
これは「次へ始まる」関係です。これは、hive(systemd-timesyncd.service
)がリストされているデバイス(time-sync.target
)がそれから始めたいことを示します。
また、見ることができますsystemdのどのサービスがtime-sync.targetを提供しますか?
答え2
このメカニズムの目的は、ソート関係を確立できるようにすることですが、失敗した必要でない限り。
time-sync.target
注文マイルストーンです。 「時刻同期」を提供するすべてのサービスは、「時刻同期」が適用されるまでターゲットが準備されていないことをBefore
指定します。time-sync.target
実行時に適用されるために「時間同期」が必要なすべてのサービスAfter
はtime-sync.target
。
後者がWants
対象とも関連している場合いつも注文されるアイテムのセットには常に含まれるため、最終的に注文されます。
実際に具体的な「時間同期」サービスがない場合、これは次善策と見なされます。システムに属する人々は、この場合、そのような命令が適用されてはならないと思います。代わりに、サービスはtime-sync.target
存在しないかのように注文する必要があり、一部のサービスはより早く開始できるようにする必要があります(マイルストーンのない「自然な」場所の場合)。
解決策はtime-sync.target
実際には存在しません。時間同期が可能になった後に開始されると予想されるサービスには必要ありません。したがって、次の場合、注文されたもののセットには存在しません。ただサービスが開始されました。次の場合にのみコレクションにインポートします。実際「時間同期」サービスが開始され、このサービス(クライアントサービスではない)はWants
それを導入する関係を持ちます。
ターゲットが必ずしもサービスのコレクションである必要はありません。マイルストーンを注文することもできます。
systemdとは別の場所では、そのような純粋なマイルストーンがかなりあります。 noshツールセットのサービスバンドルコレクションのターゲットは、name-services
同様の純粋な注文のマイルストーンです。
追加読書
- ジョナサンデボインポラード(2018)。
system-control
。 スナックガイド。ソフトウェア。
答え3
time-sync.target
正確な時間に依存するサービスがsystemd-timesyncd、ntpdなどに依存する必要がないようにシステムにあるフラグです。
このBefore
エントリはsystemdにsystemd-timesyncdを起動してからtime-sync.targetを起動するように指示します(ソートにのみ使用されます)。Wants
実際にフラグを設定するように指示します。