我需要监视服务的状态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
nagiosrestart
导致无条件自动重启的文件:#!/bin/sh
只是为了好玩,我为 nagios 添加了一个预构建的服务包,该服务包将在 1.13 版本中提供,这与一些标准的装饰(例如依赖信息)差不多。
执行 truerun
包含 runit 工具集的文件:#!/bin/sh -e
exec chpst -u nagios nagiosrun
带有 s6 工具集的文件:#!/command/execlineb -P
s6-setuidgid nagios
nagiosrun
包含 daemontools、daemontools-encore 或 freedt 工具集的文件:#!/bin/sh -e
exec setuidgid nagios nagiosrc.main
包含 perp 工具集的文件:#!/bin/sh -e
exec 2>&1
start() { exec runuid nagios nagios; }
重置() { 退出 0; }
评估“$1”“$@”
运行单个服务的程序是该服务唯一的特殊之处。其余的内容因服务而异。人们可以使用诸如 之类的命令以相同的方式查询所有服务的服务状态svstat
。启用和禁用引导时的自动启动是符号链接的问题。手动启动和停止服务是svc -u
和的问题svc -d
。等等。
nosh 有多个垫片(如果需要),例如systemctl status
和initctl status
。重要的是,它有一个service
垫片,所以如果你真的就像service nagios status
你可以继续使用它一样。 ☺ 但是忘记整个令人讨厌的锁定文件业务以及临时监控的整个概念。如果有合适的服务经理,你就不会处理类似的事情。服务管理器进行监视,并正确跟踪守护进程。
系统
包装盒中没有用于 nagios 的 systemd 服务单元文件。但很多人已经写了自己的:
systemd 没有附带 shimservice
命令,但某些 Linux 发行版从其他来源提供了该命令。