GNU/Linux >> Linux の 問題 >  >> Linux

Systemd:After と Requires の両方を使用する

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

Linux
  1. Centos – Systemdは開始直後にサービスを終了しますか?

  2. Debian – Systemd:サービスはExecstart=とExecstop=の両方の設定を欠いています。拒否しますか?

  3. SystemdサービスはNodejsを起動しませんか?

  1. ユーザーのログイン後に systemd サービスを開始し、ユーザーのログアウト前に停止する方法

  2. systemctl は起動直後に Tomcat サービスを停止します

  3. アイドル時間後に systemd サービスを非アクティブ化する

  1. systemdを使用してスタートアップを管理する

  2. トラブルシューティングツールとしてsystemdの使用を開始します

  3. Upstart :非 upstart プロセスの後にサービスを開始する