Я пытаюсь проверить, запущена ли программа на сервере 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
в оболочке это работает.
Прежде всего, для того, чтобы ваш скрипт работал должным образом, измените «оператор 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