Scripting
檢查程序是否在 linux 上執行
我正在嘗試檢查 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 中測試命令,它就可以工作。
首先,為了讓您的腳本按預期工作,請將您的“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