サービス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.service
Requisite
serviceB.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.