Scripting

檢查程序是否在 linux 上執行

  • March 6, 2018

我正在嘗試檢查 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

引用自:https://serverfault.com/questions/900212