为了在脚本中验证服务没有运行,我尝试过
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