Я пытаюсь проверить, запущена ли программа на сервере 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 {{1 }} 2 1 nrpe не запущен Запуск демона Nagios NRPE (nrpe):
Это одно и то же сообщение независимо от того, работает nrpe или нет.
Если я проверю команду ps -ef | grep -v grep | grep $ СЕРВИС | 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