リバース要件=依存関係/より強い競合=システム単位ファイル

リバース要件=依存関係/より強い競合=システム単位ファイル

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'

関連情報