(系统版本229,fwiw)
我有一个主要服务A和一个辅助服务B.主要A可以自己运行。 但是服务B本身无法正确运行:它需要A运行(技术上B可以运行,但这是我想systemd防止的)。 我的目标是: 如果A不运行,B不应该运行。 鉴于A和B正在运行,当A停止或死亡/崩溃时,B应该停止。
我如何做到这一点?
通过向b.service中添加[Unit]项目,使用
Requisite=A.service After=A.service
以上的结果是
1) B won't start unless A is running (good). 2) B is stopped when A is stopped (good). 3) However, if I kill A, service B continues to run (bad).
我如何解决这个最后的行为#3? 我尝试使用BindsTo而不是Requisite,像这样在B的服务文件中:
BindsTo=A.service After=A.service
我得到:
1) If A is not running and I start B, then A is also started (I want an error, I don't want A started) 2) B is stopped when A is stopped (good). 3) B is stopped when A is killed (good)
所以现在#3是好的,但#1不是所需的行为。 无论是PartOf还是BindsTo似乎都不能做到这一点,但也许我没有正确的选项组合的咒语? 从手册中我不清楚哪些选项可以合并。
使用BindsTo,我也尝试过使用ExecStartPre失败B的开始,但是当然这不起作用,因为B的开始已经确定它需要A运行(并且开始它),然后才开始B.
有什么方法可以在“必备”和“绑定”之间得到一个行为? 我上面列出的1-2-3?
感谢提前!