家庭daemontools​

家庭daemontools​

我需要监视服务的状态nagios(因为,每当我对配置进行任何更改并应用新配置时,我都会发现nagios服务已停止)。如果发现处于“停止”状态,它应该自动启动。

我尝试编写一个小的 shell 脚本并将其添加到cron,但发现即使服务正在运行,该脚本每次都会执行。脚本是:

#!/bin/bash

service nagios status | grep running

if [ $? -ne 0 ]
then
        service nagios start
fi

每当服务处于“停止”状态时,输出就会service nagios status显示No lock file found in /usr/local/nagios/var/nagios.lock。我应该/usr/local/nagios/var/nagios.lock使用监控文件inotify-tools还是有更好的替代方法?

答案1

有更好的替代方案吗?

是的。使用适当的服务管理器并丢弃该/etc/init.d/nagios脚本。最好的情况是,您在 upstart 或 systemd 之类的兼容模式下使用 System 5rc脚本,在这种情况下,您将无法获得在兼容模式下不可用的一些有用的服务管理机制因为 AskFedora 的这个人没有。最坏的情况是,您在 System 5 下运行rc,并且您实际上不希望使用该脚本进行半途而废的服务管理。

有很多可用的服务管理系统。我不会详细介绍安装它们的细节,因为这超出了本答案的范围。相反,我将只关注如何启动 nagios 守护进程并在其中运行。

家庭daemontools

daemontools服务管理工具集系列包括:

这里您需要的主要东西是成为守护进程的程序。对于 nagios,这是 2 行或 3 行。人们可以混合搭配这些工具集。以下是一些合适的 2-liner,使用几种不同的工具集:

  • run包含 nosh 工具集的文件:
    #!/bin/nosh 
    setuidgid nagios
    nagios
    以及restart导致无条件自动重启的文件:
    #!/bin/sh
    执行 true
    只是为了好玩,我为 nagios 添加了一个预构建的服务包,该服务包将在 1.13 版本中提供,这与一些标准的装饰(例如依赖信息)差不多。
  • run包含 runit 工具集的文件:
    #!/bin/sh -e 
    exec chpst -u nagios nagios
  • run带有 s6 工具集的文件:
    #!/command/execlineb -P 
    s6-setuidgid nagios
    nagios
  • run包含 daemontools、daemontools-encore 或 freedt 工具集的文件:
    #!/bin/sh -e 
    exec setuidgid nagios nagios
  • rc.main包含 perp 工具集的文件:
    #!/bin/sh -e 
    exec 2>&1
    start() { exec runuid nagios nagios; }
    重置() { 退出 0; }
    评估“$1”“$@”

运行单个服务的程序是该服务唯一的特殊之处。其余的内容因服务而异。人们可以使用诸如 之类的命令以相同的方式查询所有服务的服务状态svstat。启用和禁用引导时的自动启动是符号链接的问题。手动启动和停止服务是svc -u和的问题svc -d。等等。

nosh 有多个垫片(如果需要),例如systemctl statusinitctl status。重要的是,它有一个service垫片,所以如果你真的就像service nagios status你可以继续使用它一样。 ☺ 但是忘记整个令人讨厌的锁定文件业务以及临时监控的整个概念。如果有合适的服务经理,你就不会处理类似的事情。服务管理器进行监视,并正确跟踪守护进程。

系统

包装盒中没有用于 nagios 的 systemd 服务单元文件。但很多人已经写了自己的:

systemd 没有附带 shimservice命令,但某些 Linux 发行版从其他来源提供了该命令。

进一步阅读

相关内容