systemd 如何判断服务是否正常

systemd 如何判断服务是否正常

该问题与以下内容相关:为 autossh 提供可靠的 systemd 服务

我有一个使用 type=simple 的服务。以下是 systemd 文档:

Type=simple(默认):systemd 认为该服务会立即启动。进程不得分叉。如果需要在此服务上调用其他服务,请不要使用此类型,除非它是套接字激活的。

想象一下服务陷入无限循环或挂起。

systemd 如何知道服务是否正常?

有没有某种如果工业控制计算机systemd 和服务之间可以实现吗?

我想要的是:我需要systemctl status foo-service知道服务是否正常。这与“服务的 Linux 进程是否仍然存在”不同。

答案1

systemctl status不提供有关服务运行的高级信息。

如果你正在寻找方法来通知 systemd 有关你的服务状态的变化,sd_notify可能会有所帮助。不过,这取决于您的服务自我诊断的能力。如果您的服务使用sd_notify, you can configure the service withWatchdogSec。引用自文档

配置服务的看门狗超时。启动完成后,看门狗将被激活。服务必须定期使用“WATCHDOG=1”(即“keep-alive ping”)调用 sd_notify(3)。如果两次调用之间的时间大于配置的时间,则服务将处于失败状态,并将使用 SIGABRT 终止。

但是,使用systemctl show您可以检索有关该服务的一些额外的机器可读信息,这可能有助于您判断该服务是否正常。

如果你想systemd知道你的服务是否无限循环运行,你很可能运气不佳。这个问题与停机问题,已证明不存在解决该问题的通用算法。虽然您的特定问题可能可以解决,但这很可能至少会浪费大量资源。请参阅这个相关问题

相关内容