Manでsystemdユニットに与えられた定義は少し不明確です: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
ユニット
foo.service
に設定Before=bar.service
が含まれていて、両方のユニットが起動されている場合、bar.service
の起動はfoo.service
が起動されるまで遅延されます。 [...]After=
はBefore=
の逆です。つまり、After=
は、リストされたユニットの起動が完了した後に構成済みユニットが起動することを保証し、Before=
はその逆を保証します、リストされたユニットが開始される前に、構成されたユニットが完全に起動されていること。
a.service
とb.service
があるとします。 a.service
はb.service
に依存しているため、b.service
の前にa.service
を完全に起動してください。
前述のmanページを読んだ後、私は以下についての決定的な説明を見つけることができませんでした:
Before=b.service
ユニットファイルでa.service
を指定する必要がありますAfter=a.service
ユニットファイルでb.service
を指定する必要がありますAfter=a.service
がb.service
ユニットファイルに必要ですおよびBefore=b.service
ユニットファイルのa.service
systemdユニットファイルの依存関係を宣言する必要があるのはどれですか?それは重要ですか?
ユニットのペアに必要なのは、After=
またはBefore=
のいずれかだけです。 systemctl
のmanページからこれを好むかもしれません:
--after ...すべてのAfter =依存関係が自動的にミラーリングされて、Before =依存関係が作成されます。
このオプションをlist-dependencies
とともに使用して、systemdが何をすべきかを確認します。例えば
$ systemctl list-dependencies --after timers.target
timers.target
* |-sysstat-collect.timer
* |-sysstat-summary.timer
* |-systemd-tmpfiles-clean.timer
* `-unbound-anchor.timer
$ systemctl list-dependencies --before sysstat-collect.timer
sysstat-collect.timer
* |-sysstat-collect.service
* |-shutdown.target
* `-timers.target
upstart
から変換している場合は、 ここ からヒントが得られる可能性があり、 ここ という見出しの下にあるすべてのブログを読むことができますsystemd for Administrators Blog Series。