追加読書

追加読書

存在するこの例システム単位ファイル:

# 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.targettime-sync.targetそちらも同じだよ要件の依存関係

この関係のユースケースは何ですか?なぜ彼らは互いに衝突しないのですか?

答え1

この二重関係のユースケースは、「提供」関係と似ています。systemd-timesyncdデバイスペアへのすべての依存関係を満たすために時間同期サービスを提供しますtime-sync.target。時間同期に依存するすべてのサービスに必要なので、これを開始する必要があります。時間同期に依存するすべてのデバイスはサービスで開始する必要があるためtime-sync.target必要です。time-sync.targetsystemd-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実行時に適用されるために「時間同期」が必要なすべてのサービスAftertime-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実際にフラグを設定するように指示します。

関連情報