这个问题涉及到: autossh可靠的systemd服务
我有一个使用type = simple的服务。 这里systemd文档:
Type = simple(默认):systemd认为服务立即启动。 该过程不得分叉。 如果需要在此服务上订购其他服务,则不要使用此types,除非它是套接字激活的。
想象一下,服务处于无限循环或挂起状态。
systemd如何知道服务是否正常?
如果系统和服务之间的IPC可能会有某种types的IPC吗?
我想要的是:我想要systemctl status foo-service来告诉我服务是否正常。 这不同于“服务的linux进程仍然存在”。
systemctl status不提供有关服务运行的高级信息。
如果您正在寻找方法通知systemd有关服务的状态更改, sd_notify可能会有所帮助。 尽pipe如此,这取决于您的服务能力来进行自我诊断。 如果您的服务使用sd_notify, you can configure the service with WatchdogSec sd_notify, you can configure the service with 。 从文档中引用:
configuration服务的看门狗超时。 启动完成后,看门狗被激活。 该服务必须以“WATCHDOG = 1”(即“保持活动状态”)定期调用sd_notify(3)。 如果两次呼叫之间的时间大于configuration的时间,则服务处于失败状态,并且将以SIGABRT结束。
然而使用systemctl show你可以在服务上检索一些额外的机器可读信息,这可能会帮助你判断服务是否正常。
如果你正在寻找systemd来判断你的服务在无限循环中运行,那么你的运行很可能是不幸的。 这个问题与停机问题密切相关,为此certificate没有一个通用的algorithm来解决这个问题。 虽然您的具体问题可能是可以解决的,但至less是极大地浪费了资源。 看到这个相关的问题 。