如何显示 systemd 服务当前的服务状态?

如何显示 systemd 服务当前的服务状态?

在此输入图像描述

我有一个systemd服务(test.service),我想在使用 的命令时看到如图所示的信息systemctl status test.service。特别是,我想看到这一行[状态:avahi-daemon 0.6.30 starting up]。我的服务现在不显示它。我试图starting/start/stop/stopping/restart通过 Status:...显示服务的当前状态

我怎样才能做到呢?

期待您的帮助。谢谢!

答案1

您可能高估了它的有用性:)。

对于“启动/启动/停止/停止/重新启动”,这些应该由 systemd 显示。 (例如,它说“活动:活动(正在运行)”)。只要你实现一些启动完成通知的方法。然后systemd就可以显示准确的信息。

好处是,无论如何,服务就绪通知是使用相同的函数发送的,就像您询问的人类可读的状态消息:)。

如果您正在编写一个长时间运行的程序,那么您可能决定额外实现STOPPING=1,以防用户直接向您的进程发送信号,而不是通过 systemd 之类的systemctl stop test.service。我想RELOADING=1如果您希望 systemd 在使用时显示该状态,这种方法也是必要的systemctl reload test.service。 (对于停止,systemd 知道您的程序何时完成停止...因为它可以看到您的进程已退出)。


在 C 程序中:https://www.freedesktop.org/software/systemd/man/sd_notify.html

状态=...

将单行 UTF-8 状态字符串传递回描述服务状态的服务管理器。这是自由格式,可用于各种目的:一般状态反馈、类似 fsck 的程序可以传递完成百分比,而失败的程序可以传递人类可读的错误消息。示例:“STATUS=已完成 66% 的文件系统检查...”

作为 shell 脚本的命令:https://www.freedesktop.org/software/systemd/man/systemd-notify.html

--status=

将守护进程的自由格式状态字符串发送到 init systemd。该选项将状态字符串作为参数。这相当于 systemd-notify STATUS=...。有关此选项语义的详细信息,请参阅 sd_notify(3)。

相关内容