Пользователь Nagios может запустить проверку, но не работает при запуске с su - nagios -c?

Простите меня, если где-то уже есть ответ - я нахожу много похожих вопросов, но ничего, что, кажется, не решило бы мою проблему.

Я просто тестирую время безотказной работы некоторых серверов 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
1
задан 15 March 2016 в 13:27
1 ответ

Я идиот.

Подсказка пришла в определении команды.

В какой-то момент я бы с пользой "добавил" -H, что, очевидно, означало, что я передавал -H в качестве имени хоста ;)

Должно было быть:

define command{
command_name                    check_uptime
command_line                    $USER1$/check_uptime.sh $HOSTADDRESS$ 25 28
}
1
ответ дан 3 December 2019 в 23:50

Теги

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