
我正在尝试检查 Linux 服务器上的某个程序是否正在运行,如果没有,则启动它。但我收到奇怪的错误:
#!/bin/sh
SERVICE=nrpe
ps -ef | grep -v grep | grep $SERVICE | wc -l
if [ $? -gt 1 ]
then
echo "$?"
echo "$SERVICE service running, everything is fine"
else
echo "$?"
echo "$SERVICE is not running"
service $SERVICE start
fi
输出为:
[root@mail ~]# check_nrpe.sh 2 1 nrpe 未运行 启动 Nagios NRPE 守护进程(nrpe):
无论 nrpe 是否正在运行,消息都是相同的。如果我ps -ef | grep -v grep | grep $SERVICE | wc -l
在 shell 中测试该命令,它会起作用。
答案1
首先,为了使您的脚本按预期工作,请将“if 语句”更改为:
if [ $? -eq 0 ]
此外,xinetd 有可能正在管理你的 nrpe(这很常见),在这种情况下,你不会看到 nrpe 进程正在运行,而是看到 xinetd 进程。
所以我认为更好的检查是看看端口是否打开,我建议你将命令更改ps -ef...
为(假设 nrpe 以默认方式配置并打开 tcp 端口 5666):
netstat -plunt | grep -w 5666
退出状态将按照您的预期运行,如果端口打开则为“0”,如果端口关闭则为“非 0”。
另外,你可以将整个脚本写成一行:
netstat -plunt | grep -qw 5666 && echo "NRPE is running" || echo "NRPE is not running"
例子:
[root@centolel tmp]# netstat -plunt | grep -qw 5666 && echo "NRPE is running" || echo "NRPE is not running"
NRPE is running
[root@centolel tmp]# service xinetd stop
Stopping xinetd: [ OK ]
[root@centolel tmp]# netstat -plunt | grep -qw 5666 && echo "NRPE is running" || echo "NRPE is not running"
NRPE is not running