systemdは、サービスが無効になった後に注文されたサービスを開始します。

systemdは、サービスが無効になった後に注文されたサービスを開始します。

サービスBデバイス構成(ワンタイムサービス):

[Unit]
Description=Service B
After=serviceA.service

サービスAはデフォルトで無効になっています。 (簡単なサービスです。)

● serviceA.service - service A
Loaded: loaded (/usr/lib/systemd/system/serviceA.service; disabled; vendor preset: disabled)
Active: inactive (dead)

注文要件のためにサービスAが開始されるまでサービスBが開始されないようにしたいと思います。私が観察したところ、マシンが起動すると、サービスAを待たずにサービスBが起動します。誰でもこれを説明できますか?

ベストアンサー1

起動(および実行中)時にのみ開始するには、serviceB.service次のものを追加する必要があります。serviceA.serviceRequisiteserviceB.service

からman systemd.unit

前提条件=

Requires=に似ています。ただし、ここにリストされているデバイスがまだ起動していない場合は起動されず、デバイスの起動はすぐに失敗します。 Requisite =は、両方のデバイスが同じトランザクションで開始されても順序依存性を意味しません。したがって、この設定は通常、After =と一緒に使用して、他のデバイスよりも先に起動しないようにする必要があります。

サービスB.サービス

[Unit]
Description=Service B
After=serviceA.service
Requisite=serviceA.service

[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/somescript.sh

[Install]
WantedBy=multi-user.target

たとえば、有効になっていないserviceA.service場合、または必要に応じて実行されなかった場合は、serviceB.serviceログに次のメッセージが表示されますserviceB.service

A dependency job for serviceB.service failed. See 'journalctl -xe' for details.

おすすめ記事