Я создал простой скрипт для 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
, я всегда возвращал else echo
Check application port is down
Хотя, как я уже сказал, запуск сценария локально работал правильно
Пользователь nrpe имел все права, необходимые для выполнения сценария, SELinux был в разрешающем режиме, но я так и не смог заставить его работать. Поэтому я изменил строку RESULT, чтобы использовать 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.