【发布时间】:2017-11-12 19:30:49
【问题描述】:
(系统版本 229)
我有一个主服务 A 和一个辅助服务 B。主 A 可以自己运行。但是服务 B 无法自行正确运行:它需要 A 运行(技术上 B 可以 运行,但这是我希望 systemd 阻止的)。我的目标:如果 A 没有运行,B 不应该运行。鉴于 A 和 B 正在运行,当 A 停止或死亡/崩溃时,应该停止 B。
我如何做到这一点?
我通过将 [Unit] 项目添加到 b.service 来接近,使用
Requisite=A.service
After=A.service
上面的结果是
- 除非 A 正在运行(良好),否则 B 不会启动。
- A 停止时 B 也停止(良好)。
- 但是,如果我杀死 A,服务 B 会继续运行(错误)。
如何解决最后一个问题? PartOf 和 BindsTo 似乎都不起作用,但也许我没有正确的选项组合咒语?从手册页中我不清楚可以组合哪些选项。
systemd.unit 手册页:https://www.freedesktop.org/software/systemd/man/systemd.unit.html 相关:Systemctl dependency failure, stop dependent services
【问题讨论】:
-
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。
-
真的吗? SO中已经回答了很多系统问题。而且它涉及到系统的开发,不仅仅是开发应用程序。
-
您是否尝试过使用 BindsTo 代替 Requisite,因为在链接的问题中提出了解决方案?
-
谢谢,我会把问题移到 S/E。 @Jesus,BindsTo 处理 kill B 部分,但它具有副作用,即当我启动 B 时,A 也会启动。我希望 B 给出一个依赖错误,就像它对 Requisite 所做的那样。但我想 BindsTo 是两者中更好的选择。感谢建议我再看一遍。
-
移至 ServerFault:serverfault.com/questions/884211/…
标签: linux service systemd systemctl