Простите меня, если где-то уже есть ответ - я нахожу много похожих вопросов, но, похоже, ничего не решает мою проблему.
Я просто тестирую время безотказной работы некоторых серверов Windows в nagios, и если оно превышает определенное значение, я хочу предупредить об этом.
Он работал вчера, и в какой-то момент я, кажется, что-то сломал, но не могу точно определить, что не так.
Во-первых, под root тест работает:
./libexec/check_uptime.sh x.x.x.x 28 30
1449919
OK. Uptime 16 Days.
Как nagios, через su - nagios тест работает:
su - nagios
-bash-3.2$ pwd
/usr/local/nagios
-bash-3.2$ ./libexec/check_uptime.sh xx.xx.xx.xx 28 30
1449969
OK. Uptime 16 Days.
Однако я считаю, что «правильный» способ проверки - через su - nagios -c?
su - nagios -c "./libexec/check_uptime.sh 10.36.128.22 28 30"
1450084
OK. Uptime 16 Days.
Однако команда все еще не работает на веб-странице / демоне
Uptime UNKNOWN 15-03-2016 11:04:24 0d 1h 4m 10s 3/3 0
Мне кажется, что определение команды верное:
define command{
command_name check_uptime
command_line $USER1$/check_uptime.sh -H $HOSTADDRESS$ 25 28
}
Как и определение службы:
define service{
use generic-service
hostgroup_name Windows-Servers
service_description Uptime
check_command check_uptime
}
Как-то потерял скрипт при редактировании, вот он снова:
#!/bin/bash
## Shamelessly adapted from http://correctlife.blogspot.de/2011/02/wrapper-on-checkntuptime.html
HOSTADDRESS=$1
MAXWARN=28 # in days
MAXCRIT=30 # in days
MINCRIT=1
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
SECONDS=`/usr/local/nagios/libexec/check_nt -H $HOSTADDRESS -p 12489 -s $ekr3t -v COUNTER -l "\\System\\System Up Time"`
#echo $SECONDS
if [ $SECONDS == 0 ]; then
echo "UNKNOWN: No uptime recieved. Uptime Value: $SECONDS"
exit 3
fi
HOURS=$(( $SECONDS / 60 / 60 ))
SECONDSINHOURS=$(( $HOURS * 60 * 60 ))
DAYS=$(( $HOURS / 24 ))
REMAININGSECONDS=$(( $SECONDS - $SECONDSINHOURS ))
MINUTES=$(( $REMAININGSECONDS / 60 ))
FORMEDUPTIME="${DAYS} Days"
if [[ $HOURS -lt $MINCRIT ]]; then
echo "CRITICAL: System restarted in last hour."
exit 2
fi
if [[ $DAYS -ge $MAXCRIT ]]; then
echo "CRITICAL: System up over ${MAXCRIT} Days."
exit 2
fi
if [[ $DAYS -ge $MAXWARN ]]; then
echo "WARNING: System up over ${MAXWARN} Days."
exit 1
fi
echo "OK. Uptime $FORMEDUPTIME."
exit 0
Я идиот.
Ключ к разгадке пришел в определении команды.
В какой-то момент я услужливо «добавил» к нему -H, что, очевидно, означало, что я передавал -H в качестве имени хоста;)
Должно было:
define command{
command_name check_uptime
command_line $USER1$/check_uptime.sh $HOSTADDRESS$ 25 28
}