Проверка, работает ли программа на 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 {{1 }} 2 1 nrpe не запущен Запуск демона Nagios NRPE (nrpe):

Это одно и то же сообщение независимо от того, работает nrpe или нет. Если я проверю команду ps -ef | grep -v grep | grep $ СЕРВИС | wc -l в оболочке, это работает.

-1
задан 6 March 2018 в 11:18
1 ответ

Первый из все, чтобы ваш сценарий работал должным образом, измените «оператор 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
3
ответ дан 5 December 2019 в 19:12

Теги

Похожие вопросы