Назад | Перейти на главную страницу

Проверка, работает ли программа в 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 в оболочке это работает.

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