反向需求 = 依赖/更强的冲突 = 在 systemd 单元文件中

反向需求 = 依赖/更强的冲突 = 在 systemd 单元文件中

我有两个 systemd 单元 A 和 B,它们不应同时运行。两者都提供对相同资源的访问,但以不同的方式,并且其中一个处理“从外部”停止的方式不如另一个优雅。

如果我指定Conflicts=它们之间的依赖关系,启动其中一个单元将停止另一个单元。我更喜欢一种更强的关系,类似于(在一个方向)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'

相关内容