エラーなしで他のサービスユニットが実行されている間にのみサービスユニットを起動するには?
2つのサービス単位があります。
#echo-date-0.service
[Unit]
Description=
[Service]
ExecStart=/home/user/bash/echo-date-0.sh
[Install]
WantedBy=multi-user.target
#echo-date-1.service
[Unit]
Description=
[Service]
ExecStart=/home/user/bash/echo-date-1.sh
Requires=echo-date-0.service
After=echo-date-0.service
[Install]
WantedBy=multi-user.target
私のスクリプトecho-date-0.shは終了コード1(exit 1)を返し、echo-date-0.serviceのステータスを確認すると次のようになります。
Active: failed (Result:exit-code)
Process: (code=exited, status=1/FAILURE)
ただし、echo-date-0.serviceが必要ですが、echo-date-1.serviceも実行されます。 echo-date-0.serviceが失敗した場合にecho-date-1.serviceの実行を停止する方法は?
答え1
#echo-date-0.service
[Unit]
Description=
[Service]
Type=oneshot
## Stay alive for other services to acknowledge
RemainAfterExit=yes
ExecStart=/home/user/bash/echo-date-0.sh
[Install]
WantedBy=multi-user.target
#echo-date-1.service
[Unit]
Description=
Requires=echo-date-0.service
After=echo-date-0.service
## A unit that must be in an active non-erroring state
## and combos great with After=
BindsTo=echo-date-0.service
[Service]
ExecStart=/home/user/bash/echo-date-1.sh
[Install]
WantedBy=multi-user.target
Jesse_b少なくとも私にとってはBindsTo=
、Unixシステム役に立ちます。
そしてビゴンセクションに&[Unit]
が含まれていることが正しく指定されています。Requires=
After=
実際、echo-date-0.service
上記の(動作することを望む)例では、生きるサービスに(したがってsystemctl stop echo-date-0.service
状態をリセットするには実行する必要があります)、このように設定してAfter=
&を組み合わせて間違えないサービスを指すようにしますBindsTo=
。echo-date-1.service
しなければならないOPが要求したものをここで実装してください。
この場合、どのような形で接続されたサービスを表示するには、引き続きsystemctl list-dependencies --before <service/trigger>
実行できる必要があります。echo-date-0.service
答え2
Requires=
セクションAfter=
にある必要があります。[Unit]