Umut の答えは正しいですが、Requires=
の間に相互作用があります。 と After=
それはめったに綴られていません。 systemd.unit#Requires=から (強調は私のものです):
このユニットがアクティブ化されると、リストされているユニットもアクティブ化されます。他のユニットのいずれかがアクティブ化に失敗した場合、および順序の依存関係 After=
失敗したユニットに設定されています 、このユニットは開始されません。
基本的に、これは After=
がなければ foo.service
の場合、両方のサービスが開始されます 開始されます (Requires=
のため) )、しかし systemd は foo.service
を停止しません bar.service
の場合 正常に起動しません。
ただし、 After=
を追加すると 、 bar.service
を待ちます 正常に開始するには (いくつかの例外があります。Requires=
の注を参照してください) docs) foo.service
を開始する前に bar.service
の場合は開始しません 始まらない
Requires=
の違いは多少関連しています。 と BindsTo=
(上記のリンクにあるドキュメントを参照してください)。
After=
の両方を使用しても問題ありません。 と Requires=
.それらにはさまざまな目的があります。 Requires=
開始依存関係を設定します。 systemd は、いずれかのボディが foo.service を開始しようとしている場合、bar.service も開始する必要があることを確認します。ある時点で bar.service が失敗すると、foo.service も停止されます。
After=
サービス間の開始命令を出しています。両方のサービスの開始がスケジュールされている場合、After=
開始順序が設定されていることを確認します。
例として、systemd 自身のサービス ファイルを見ることができます。
/lib/systemd/system/basic.target
[Unit]
...
Requires=sysinit.target
After=sysinit.target
...