进一步阅读

进一步阅读

我正在尝试编写以编程方式检查服务状态的代码,但对于服务名称中的拼写错误也具有鲁棒性。在我看来,一个合理的程序应该具有以下行为和语义:

  • 它以单位名称作为参数
  • 如果找到该单元,它会打印出服务状态并以状态 0 退出(例如活动、非活动等...)
  • 如果该单位是不是找到/加载,它打印出错误并以非零状态退出

值得注意的是,这些不满足此要求:

  • systemctl is-active servicename(如果设备未激活,则以非零返回状态退出,如果未加载 servicename,则行为相同)
  • systemctl is-failed servicename(与上面类似的行为)
  • systemctl show servicename -pActiveState(如果未加载 servicename,则退出状态为 0)

看起来最接近的是,systemctl show servicename -pLoadState -pActiveState 但随后我必须解析 LoadState 字符串以确定是否存在拼写错误,这似乎比这个简单任务所需的更复杂。

有什么建议么?

答案1

有什么建议么?

鼓励 systemd 人员修复 2014 年以来仍然存在的 bug。

systemctl手册记录了适当的 LSB 版本 3 退出状态,在 systemd 中称为EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN,并且此退出状态是甚至用过对于systemctl status不存在的服务,将其与存在但未运行的服务区分开来。

然而,它不被 所使用systemctl is-active

进一步阅读

相关内容