例:
bar.service
:
[Unit]
After=foo.service
foo.serviceが正しく起動しない場合、bar.serviceは起動しますか? foo.serviceが何にも依存せずに起動しない場合はどうなりますか?
答え1
After=x
これを次の意味で考えるべきです。
- このジョブは、ジョブ「x」が完了した後に開始される。
- これは、ジョブ「x」の実行結果について何も示さず、ジョブ「x」が実行されるまでこのジョブを待つことを示します。
~からman systemd.unit
:
最も重要なのは、サービスユニットの場合、設定されたすべての
Before=
起動After=
コマンドが呼び出され、そのコマンドが失敗したか成功した起動を報告すると、起動が完了したと見なされることです。これにはExecStartPost=
(またはExecStopPost=
終了の場合)含まれます。
Requires=
これらの設定は、またはの設定されたWants=
要件のRequisite=
依存関係とは無関係で直交ですBindsTo=
。After=
オプションにデバイス名を含めるのが一般的なパターンですWants=
。この場合、リストされたデバイスは、これらのオプションで設定されたデバイスの前に起動されます。
したがって、これは次のことを意味します。
bar.service
foo.service
失敗した状態で終了しても起動します。foo.service
アクティブになっていない場合は、他のデバイスがアクティブになるbar.service
のを待ちます。foo.service
bar.service
満たされていない依存関係が失敗した状態になる可能性が非常に高いです。
待ち時間は他の設定(例:)によって制御されますJobTimeoutSec=
。JobRunningTimeoutSec=
(望むより:システムサービスのタイムアウト値を変更するには?)このイベントをキャッチする
ために使用できますJobTimeoutAction=
。
- 編集する:(2)と(3)はのみ適用されるため、使用されなくなりました
Requisite=foo.service
。 @TooTeaを修正していただきありがとうございます。