(系统版本229)
我有一个主要服务A和一个次要服务B。主要A可以自己运行。但是服务B不能单独正确运行:它需要A才能运行(从技术上说B可以运行,但这是我希望systemd
阻止的)。我的目标:如果A没有运行,则B不应运行。假设A和B正在运行,则当A停止或死/崩溃时,B应该停止。
我该如何实现?
我通过使用[b]
Requisite=A.service
After=A.service
上面的结果是
我该如何解决这种最后的行为?
PartOf
和BindsTo
似乎都无法解决问题,但也许我没有正确的选项组合咒语?从手册页上我还不清楚可以组合哪些选项。systemd.unit手册页:https://www.freedesktop.org/software/systemd/man/systemd.unit.html
相关:Systemctl dependency failure, stop dependent services
最佳答案
如果您使用Type=notify
启动服务A,如果您使用SIGINT
或SIGTERM
终止服务A,则可以实现某些目标,您实际上可以处理该问题并将$NOTIFY_FD
上的消息发送到systemd
,但是SIGKILL
仍然无法实现该选项。这有点涉及,但也许可以实现您想要的。
您还应该考虑制作A Restart=always
。这将至少确保A将保持可用状态,而B将不会继续发出错误。当您kill
A(在systemd
之外)时,systemd
无法知道A被杀死了-特别是如果您使用kill -9
这样做(无法处理SIGKILL
)。 。因此,处理此问题的最佳方法之一就是将Service A设置为Restart=always
。
关于linux - systemd : Stop dependent service when main service crashes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47253020/