(系统版本229)

我有一个主要服务A和一个次要服务B。主要A可以自己运行。但是服务B不能单独正确运行:它需要A才能运行(从技术上说B可以运行,但这是我希望systemd阻止的)。我的目标:如果A没有运行,则B不应运行。假设A和B正在运行,则当A停止或死/崩溃时,B应该停止。

我该如何实现?

我通过使用[b]

Requisite=A.service
After=A.service

上面的结果是
  • B除非A正在运行(良好),否则不会启动。
  • B在A停止(良好)时停止。
  • 但是,如果我杀死A,则服务B继续运行(错误)。

  • 我该如何解决这种最后的行为? PartOfBindsTo似乎都无法解决问题,但也许我没有正确的选项组合咒语?从手册页上我还不清楚可以组合哪些选项。

    systemd.unit手册页:https://www.freedesktop.org/software/systemd/man/systemd.unit.html
    相关:Systemctl dependency failure, stop dependent services

    最佳答案

    如果您使用Type=notify启动服务A,如果您使用SIGINTSIGTERM终止服务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/

    10-15 07:11