Nagios 用户可以运行检查,但是使用 su - nagios -c 运行时失败?

Nagios 用户可以运行检查,但是使用 su - nagios -c 运行时失败?

如果这个问题已经在某个地方得到解答,请原谅我——我发现很多类似的问题,但似乎没有什么能解决我的问题。

我只是在 nagios 中测试一些 Windows 服务器的正常运行时间,如果它超过了某个值,我希望发出警报。

昨天它还在运行,但在某些时候我似乎弄坏了一些东西,但又无法准确找出问题所在。

首先,以 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

我是个白痴。

线索来自于命令定义。

在某个时候,我会有帮助地“添加”-H,这显然意味着我将-H作为主机名传递;)

本来应该:

define command{
command_name                    check_uptime
command_line                    $USER1$/check_uptime.sh $HOSTADDRESS$ 25 28
}

相关内容