[ubuntu] systemd はシステムコンポーネントとサービス間の依存関係を管理します

systemd はシステム コンポーネントとサービス間の依存関係をどのように管理しますか?

systemd はユニットを使用してシステム コンポーネントとサービスを定義します。各ユニットには、ユニットのプロパティと依存関係を定義する対応する構成ファイルがあります。

systemd は構成ファイルを使用してサービス間の依存関係を管理します。これらの構成ファイルは通常、システム構成に応じて/etc/systemd/system/1 つまたは複数のディレクトリにあります。/usr/lib/systemd/system/

systemd が依存関係を管理する一般的な方法をいくつか示します。

  1. Requires および Wants:ユニット構成ファイルでRequiresおよびキーワードを使用することによりWants、ユニットが他のユニットに依存することを指定できます。Requires強い依存関係を示します。つまり、現在のユニットを開始するには、依存するユニットが正常に開始される必要があります。Wants弱い依存関係を示します。つまり、依存ユニットの起動は必要ありませんが、依存ユニットが使用可能な場合は、現在のユニットが最初に起動されます。

  2. Before および After:BeforeおよびAfterキーワードを使用して、ユニット間の開始順序を定義できます。Beforeは、現在の単位が指定された単位の前に開始される必要があることを示し、After現在の単位が指定された単位の後に開始される必要があることを示します。これにより、起動時にサービスが事前に定義された順序で開始されるようになります。

  3. PartOf および RequiresMountsFor:PartOfユニットが別のユニットの一部であることを定義するために使用されるキーワード。マスター ユニットが起動または停止すると、それに応じてスレーブ ユニットも起動または停止します。RequiresMountsForユニットに必要なファイルシステムのマウント ポイントを指定するために使用されるキーワード。

  4. OnFailure:OnFailureキーワードを使用すると、指定したユニットの起動に失敗した場合にのみ起動するユニットを定義できます。これは、フォールト トレランス メカニズムとフォールバック サービスを定義するのに役立ちます。

これらの依存関係構成により、systemd は、起動および管理中にサービスが正しい順序で開始および停止されることを保証します。依存関係を定義すると、サービスが依存する他のサービスが利用可能な場合にのみサービスが開始されるようにすることもできるため、システムの信頼性と安定性が向上します。

systemctlコマンドを使用して、ユニットとその依存関係を表示および管理できます。たとえば、systemctl status <unit>ユニットのステータスと依存関係を表示したり、systemctl enable <unit>ユニットを有効にしたり、systemctl start <unit>ユニットを開始したりすることができます。

依存関係を適切に管理および構成するには、systemd のドキュメントを注意深く読み、各ユニットのプロパティとキーワードの意味を理解することをお勧めします。

次にRequiresWants、 、Beforeおよびを使用したAfter例を示します。

serviceA.serviceという 2 つのサービスがあるとしますserviceB.serviceserviceA.serviceを開始する前に開始する必要がありserviceB.serviceserviceB.service他のサービスに依存しません。

serviceA.service設定ファイルの内容は以下のとおりです。

[Unit]
Description=Service A
Requires=serviceB.service
After=serviceB.service

[Service]
ExecStart=/path/to/serviceA

serviceB.service設定ファイルの内容は以下のとおりです。

[Unit]
Description=Service B

[Service]
ExecStart=/path/to/serviceB

この例では、serviceA.service構成ファイル内の はが に依存することをRequires=serviceB.service示し、は の後に開始する必要があることを指定しますこうすることで、 の起動時にsystemd が自動的に起動し、より前にsystemdが必ず起動しますserviceA.serviceserviceB.serviceAfter=serviceB.serviceserviceA.serviceserviceB.serviceserviceA.serviceserviceB.serviceserviceB.serviceserviceA.service

上記の例はデモンストレーションのみを目的としており、サービスのニーズと複雑さに応じて、実際の構成ファイルにはさらに多くのオプションと設定が必要になる場合があることに注意してください。

公式の例

コマンド ラインを使用して、オペレーティング システムの既存のサービス構成を表示します。acpid.service

xzbd@ubuntu:~$ cat /usr/lib/systemd/system/acpid.service 
[Unit]
Description=ACPI event daemon
Requires=acpid.socket
ConditionVirtualization=!container
Documentation=man:acpid(8)

[Service]
StandardInput=socket
EnvironmentFile=/etc/default/acpid
ExecStart=/usr/sbin/acpid $OPTIONS

[Install]
WantedBy=multi-user.target


おすすめ

転載: blog.csdn.net/m0_47406832/article/details/132471447