我写了一个简单的nagios命令来检查超过1秒的值的变化
#!/bin/bash HOSTNAME=$1 COMMUNITY=$2 OID=$3 WAITTIME=1 echo "/usr/lib/nagios/plugins/check_snmp -H $HOSTNAME -C $COMMUNITY -o $OID" > /tmp/csnmp_comand VAR1=`/usr/lib/nagios/plugins/check_snmp -H $HOSTNAME -C $COMMUNITY -o $OID|cut -d"=" -f2|sed 's/[aZ]//'` /bin/sleep $WAITTIME VAR2=`/usr/lib/nagios/plugins/check_snmp -H $HOSTNAME -C $COMMUNITY -o $OID|cut -d"=" -f2|sed 's/[aZ]//'` CHANGED=`/usr/bin/expr $VAR2 - $VAR1` BPS=`/usr/bin/expr $CHANGED / $WAITTIME` echo "OK $BPS|bps=$BPS" > /tmp/check_snmptest echo "OK $BPS|bps=$BPS" exit 0
我写了一个叫这个脚本的服务
define command{ command_name snmp_cps command_line /usr/lib/nagios/plugins/check_cps '$HOSTADDRESS$' '$_HOSTSNMPCOMMUNITY$' '$ARG1' }
当我手动调用脚本(即使作为nagios用户),我得到
OK 233|bps=233
或者类似的东西,但是当我安排这个命令它返回null并将其设置为关键
另外我的host.cfg是
define host{ use generic-host host_name asa5505.customer.local alias Options ASA 5505 address asa5505.customer.local _SNMPCOMMUNITY SetSecurly } define service { use generic-service host_name asa5505.customer.local service_description Outside Interface PBS check_command snmp_cps!1.3.6.1.2.1.2.2.1.10.16 }
随着一些变化(主机名和snmpcommunity)
你在$ARG1$
$上丢失了$ARG1$
,所以OID被完全忽略了(Nagios会将$ ARG1传递给shell,这会将其解引用为“”)。
您应该在脚本中添加一些$ 1,$ 2和$ 3的理智检查,以防止将来出现这种情况。