systemdサービスの依存関係と順序付け

systemdの依存関係ディレクティブをマスター:After、Before、Requires、Wants、BindsTo、PartOf。順序付け依存関係と要件依存関係の違いを理解します。

Operational Guides

詳細な説明

サービスの起動順序を制御する

systemdは2つの別々のメカニズムでサービス依存関係を管理します:順序付け(いつ起動するか)と要件(何が実行されている必要があるか)。

順序付けと要件

ディレクティブ タイプ 効果
After= 順序付け リストされたユニットの後にこのサービスを起動
Before= 順序付け リストされたユニットの前にこのサービスを起動
Requires= 要件 リストされたユニットが実行中でなければならない
Wants= 要件 リストされたユニットを起動すべきだが、失敗は許容
BindsTo= 要件 Requiresより強い;リストされたユニットが停止するとこれも停止

よくある間違い:RequiresなしのAfter

# 間違い:要件なしの順序付け
After=postgresql.service

これはPostgreSQLが起動される場合に、サービスがその後に起動することのみを保証します。通常は両方が必要です:

# 正しい:順序付けと要件
After=postgresql.service
Requires=postgresql.service

ユースケース

WebフロントエンドがAPIサーバーに依存し、APIサーバーがデータベースとオプションでキャッシュに依存するマルチサービスアプリケーションを設計し、適切な起動順序と障害伝播を行う場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く