Я создал простой скрипт для nagios, чтобы проверить порт на удаленном сервере. Изначально я пробовал использовать lsof
.
#!/bin/bash
RESULT=$(lsof -i :8080 | grep LISTEN)
if [ -n "$RESULT" ]
then
echo "$RESULT"
exit 0
else
echo "Check application port is down"
exit 2
fi
На локальном компьютере пользователь nagios может запустить и выполнить сценарий и получить ожидаемый результат. Но удаленно, используя check_nrpe
, Я всегда получал еще эхо
Check application port is down
Хотя, как я уже сказал, запуск сценария локально, он работал правильно
Пользователь nrpe имел все права, необходимые для выполнения сценария, SELinux находился в разрешающем режиме, но я так и не смог заставить его работать. Поэтому я изменил строку РЕЗУЛЬТАТ на использование netstat
.
RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)
И тогда я мог бы получить ожидаемый ответ, используя check_nrpe
удаленно. Я предполагаю, что это какая-то проблема с check_nrpe
и lsof
. Но я так и не нашел ничего в журналах.
У кого-нибудь есть идеи или предложения, чтобы заставить это работать правильно lsof
?
Пользователи без полномочий root не видят вывода из lsof -i
. (Подтверждено в Debian 8 и Cent 7, без SELinux.)
Если вы хотите использовать это в проверке nagios, вам придется запустить lsof через sudo.
Если sudo настроен на требование tty (может быть по умолчанию в CentOS), вы можете сделать что-то вроде этого:
Defaults:nagios !requiretty
nagios ALL=NOPASSWD:/usr/bin/lsof
Заменить nagios
с участием nrpe
при необходимости и при необходимости измените путь к lsof.