web-dev-qa-db-ja.com

宣言の前後のsystemd

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.serviceb.serviceがあるとします。 a.serviceb.serviceに依存しているため、b.serviceの前にa.serviceを完全に起動してください。

前述のmanページを読んだ後、私は以下についての決定的な説明を見つけることができませんでした:

  • あなたのみは、Before=b.serviceユニットファイルでa.serviceを指定する必要があります
  • あなたのみは、After=a.serviceユニットファイルでb.serviceを指定する必要があります
  • bothAfter=a.serviceb.serviceユニットファイルに必要ですおよびBefore=b.serviceユニットファイルのa.service

systemdユニットファイルの依存関係を宣言する必要があるのはどれですか?それは重要ですか?

7
Wimateeka

ユニットのペアに必要なのは、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

10
meuh