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
...