2つのシステムデバイスAとBがあり、同時に実行しないでください。どちらも同じリソースへのアクセスを提供しますが、方法は異なり、一方は他のものよりも優雅に「外部から」停止を処理します。
それらの間に依存関係を指定すると、Conflicts=
ユニットの1つを起動すると他のユニットが停止します。私は(一方向に)次のようなより強い関係を好みますRequsite=
。
- Aがすでに起動している場合、Bの起動は失敗します。
- Bがすでに起動している場合、Aを起動するとBが停止し、Aも失敗するはずです。
これを行う方法はありますか?
答え1
私は最終的にこれをしました:
存在するB.service
:
[Service]
ExecStartPre=/bin/systemctl stop A.mount
存在するA.mount
:
[Unit]
Requires=B-stopped.service
After=B-stopped.service
存在するB-stopped.service
:
[Service]
Type=oneshot
ExecStart=/bin/sh -c '! systemctl --quiet is-active B'