如何确定服务是否已终止(未运行但应该运行)?

如何确定服务是否已终止(未运行但应该运行)?

我在基于 gentoo 的系统中有一些服务/service/...,我想监视这些服务。我可以检查它们是否正在运行或正在关闭,svc-status但如何确定它们是否没有运行但应该运行?因此,它们由于某些错误而停止或被终止。有可能吗?

用例是我有相同服务的更多实例,但并非所有实例都同时运行。因此,我希望通过监控脚本得到通知,例如,仅当我显式启动 4 个实例时,8 个实例中的 3 个实例是否正在运行。

答案1

这似乎是一个工作莫尼特

如何安装和设置 Monit

答案2

您可以使用 Monit 来实现这一点。

它将自动检查正在运行的服务,如果没有则启动它们。 Monit 甚至可以向您发送电子邮件告知此事

您需要首先进行配置,但 Monit 对于每个系统管理员来说都是一个出色的轻量级工具。

您可以查找一些如何安装和配置 Monit 的示例这里

答案3

这讨论了我的小吃工具集具体来说,但其中一些概念适用于 daemontools 家族的其他成员。

你可能想告诉 Gentoo 的人他们的过程监督维基文章不幸的是,它已经过时且不完整。

为人类服务的状态

当然,以人类可读的形式获取服务状态是通过svstats6-svstatsv statperpstat命令完成的。

nosh 工具集有一个svstat(又名service-status)命令。与其他 daemontools 系列工具一样,它可以直接指向所需的服务包目录。该工具集还提供了一个system-control status垫片,可以仅从普通的服务/目标名称查找服务包目录(在各种常规位置)并调用service-status.

nosh 工具集的service-status命令可以打印出每个服务一行人类可读的形式或多行人类可读的形式。两者都包含服务的当前状态:停止了,开始,开始了,跑步, 或者停止。在 1 行形式中,如果该状态与其启用/禁用状态(指定服务在引导时最初应该启动还是关闭)不同,则会在该行中添加注释。在最近的版本中,使用颜色来引起对该注释的注意。

多行人类可读的形式始终包含服务的显式启用/禁用状态,以及其他一些内容,例如服务日志的尾部(如果它具有带有log/常规目录的常规服务main/)。所以,作为一个人,你只需阅读和比较。

但这是人类可读的形式。可靠地解析实际上很棘手。这仅考虑了人类可读输出的 1 行形式。

程序的服务状态

20 世纪首次提出的 qmail 安全格言之一认为,为程序到程序的接口解析人类可读的内容是一个坏主意。要实现监控程序(例如监控脚本),远的更好地使用采用了机器可读界面。

当然,这样的机器可读接口之一就是服务管理 API 本身。 (daemontools-encore 兼容)控制/状态 API 多年来一直稳定且众所周知,并且只是文件系统中的 FIFO 和普通文件。人们可以编写程序库来直接查看服务的文件来获取状态,人们已经这样做了supervise/oksupervise/statusPeter Ruibal 和 Andrés J. Díaz 的 Python 监督库Voxer 的 Node JavaScript 库, 举些例子。

nosh 工具集还附带svshow(又名service-show和类似的system-control show填充程序)命令,该命令以 Microsoft INI 或 JSON 格式显式生成有关服务状态的机器可读输出。

集成到服务器/数据中心监控工具中

各种监控系统都知道supervise/statusBernstein daemontools 系统,由 Guenter daemontools-encore 扩展并由 nosh 服务管理使用。他们可以按原样使用。

为了更加方便,nosh 工具集附带了一个名为 的命令nagios-check-service,可以直接用作 Nagios 插件。它采用 Nagios 插件协议,采用适当的退出状态并将适当的内容写入标准输出/错误,因此可以直接放入/etc/nagios/nrpe.d/.

进一步阅读

  • 乔纳森·德博因·波拉德 (2015)。守护进程工具家族。常见答案。
  • 可能有点过时小吃指南:
    • 乔纳森·德博因·波拉德。service-status小吃指南
    • 乔纳森·德博因·波拉德。service-show小吃指南
    • 乔纳森·德博因·波拉德。 ” nagios-check-service“。system-control小吃指南
  • 最新的小吃指南可用为Debian/Ubuntu 软件包FreeBSD/PC-BSD/DragonFlyBSD/&c。包裹,并且无需任何互联网连接即可在您的计算机上通过以下方式访问该手册:
    • man service-status
    • man service-show
    • man nagios-check-service
    • xdg-open /usr/local/share/doc/nosh/service-status.html
    • xdg-open /usr/local/share/doc/nosh/service-show.html
    • xdg-open /usr/local/share/doc/nosh/system-control.html
  • 布鲁斯·冈特尔. svstat。 daemontools-encore 手册。 §8。
  • 格里特·帕普. sv。运行手册。 §8。
  • 韦恩·马歇尔(2013)。perpstat。犯人手册。 §8。
  • 洛朗·贝尔科特. s6-svstat。 s6说明书. Skarnet 软件。

答案4

如果您正在运行 systemd,您可以使用以下命令查询所有服务状态:

systemctl list-units

相关内容