systemd:检查服务是否未运行

systemd:检查服务是否未运行

为了在脚本中验证服务没有运行,我尝试过

systemctl is-active some.service

如果服务未运行或不存在,则返回“inactive”并退出代码 3。

但有时它会返回“未知”以及退出代码 3,对此的解释可以在此处找到:https://bugzilla.redhat.com/show_bug.cgi?id=1073481

状态是更复杂的功能,在 systemd 管理器中创建一个单元。您可以通过 is-active 查看其状态,直到垃圾收集器将其吃掉。

所以基本上,调用诸如systemctl status some.service和 垃圾收集器之类的东西都会改变 的结果is-active,所以它是不可靠的。

在同一讨论中使用的建议

systemctl show some.service -p ActiveState

做出“该命令的稳定性承诺”。

然而,在一个系统上,我获取Unit some.service could not be found.并退出一项不存在的服务的代码 1,而在另一个系统上,我获取ActiveState=inactive并退出代码 0。

那么,如果服务没有运行,我该如何可靠地检查呢?

如果退出代码不为 0 或 ActiveState=inactive,这是全部事实吗?

答案1

因此,首先您应该拥有服务的确切名称,有时服务名称是 apache,守护程序名称是 httpd,因此为了避免这种情况,您应该拥有服务的确切名称,您可以通过以下方式获取所有服务:

systemctl list-unit-files

因此,为了改进搜索,您可以使用grep

systemctl list-unit-files | grep "part_of_servicename_expected"

ambigius 状态 httpd 与 apache 的示例

systemctl list-unit-files | grep -i "apache"

在此之后,如果您得到结果,您应该执行以下操作:

systemctl status servicename.service

相关内容