systemctl を使用すると、開始または停止コマンドに複数のサービス名を渡すことができます。
systemd では、サービス A がサービス B の前に停止するように構成されていると仮定します。今実行すると
systemctl stop B A
では、A とすべての依存サービスが最初に停止し、B または B が最初に systemctl コマンドに渡されますか?私は、systemctl stopのサービス名の順序がサービスが停止する順序を定義しないことです。
私はテストを実行し、彼らは私の仮説を証明しました。しかし、私はこれが常にうまくいくと100%確信したいと思います。
ベストアンサー1
まさか!現在のコードはあまりスマートではなく、すべてのサービスを停止/開始しようとします。
[与えられた順序で処理します。これは小さいそれでもとてもスマートです。何らかの理由で(おそらくパフォーマンス上の理由で)、各項目の後に待たずに最後だけ待つことになります。だからそれはうまくいきませんsystemctl start A; systemctl start B
。もっと近いですsystemctl start A & systemctl start B & wait
。 ]
したがって、ユニットファイルが次のような場合 -
# A.service
[Unit]
After=B.service
[Service]
Type=oneshot
ExecStart=/bin/sleep 2
# B.service
[Service]
Type=oneshot
ExecStart=/bin/sleep 2
systemctl start A B
AとBが始まります。現在のコードはいいえAを始める前に、Bが完全に始まるまで待つ必要があります。 [現在のAとBは並列に始まります。 ]できますjournalctl
Mar 20 20:50:29 alan-laptop systemd[2007]: Starting A.service...
Mar 20 20:50:29 alan-laptop systemd[2007]: Starting B.service...
Mar 20 20:50:31 alan-laptop systemd[2007]: Started A.service.
Mar 20 20:50:31 alan-laptop systemd[2007]: Started B.service.
ただし、AとBが開始時に初期トランザクションに含まれると、期待どおりに注文されます。
私はいくつかの異なるデバイスで使用できるsystemd-run
一時的なサービスを作成して実行するために何かをすることが可能だと思いました。すべての依存関係は一緒に処理されます。その後、デバイスAに順序依存関係がある場合、またはデバイスBへの順序依存関係がある場合、その順序依存関係は尊重されます。Requires
Wants
Conflicts
Before=
After=