【发布时间】:2014-01-30 12:57:02
【问题描述】:
当我尝试将我的 bash 脚本移植到 nagios 时遇到问题。当我在控制台上运行时,脚本运行良好,但是当我从 Nagios 运行它时,我得到消息“(null)” - 在 nagios调试日志我看到它很好地解析了脚本,但它返回了错误消息..
我不太擅长编写脚本,所以我想我需要一些帮助
该脚本的目的是检查某些服务器的 *.ears 版本,对它们进行 md5 处理并比较输出以查看版本是否匹配。 为此,我在这些服务器上有一个 json,打印 *.ear 的名称和他的 md5。
so.. 脚本的第一部分使用 curl 从 json 获取该信息,并将 md5 编号存储在 .tempfile 上,然后它比较两个临时文件,如果它们匹配,我得到 $STATE_OK 消息。如果他们不这样做,它会创建一个带有日期的 .datetmp 文件(这样做的目的是在 48 小时不一致后打印一条消息)。然后,我对 .datetmp 文件进行比较,我想检查结果是否小于 48 小时它打印 $STATE_WAR,如果结果超过 48 小时它打印 $STATE_CRI
脚本的语法是“$ sh script.sh nameoftheear.ear server1 server2”
提前致谢
#/bin/bash
#Variables For Nagios
cont=$1
bas1=$2
bas2=$3
## Here you set the servers hostname
svr1= curl -s "http://$bas1.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr1
svr2= curl -s "http://$bas2.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr2
file1=.$cont-tmpsvr1
file2=.$cont-tmpsvr2
md51=$(head -n 1 .$cont-tmpsvr1)
md52=$(head -n 1 .$cont-tmpsvr2)
datenow=$(date +%s)
#Error Msg
ERR_WAR="Not updated $bas1: $cont $md51 --- $bas2: $cont $md52 "
ERR_CRI="48 hs un-updated $bas1: $cont $md51 --- $bas2: $cont $md52 "
OK_MSG="Is up to date $bas1: $cont $md51 --- $bas2: $cont $md52 "
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
##Matching md5 Files
if cmp -s "$file1" "$file2"
then
echo $STATE_OK
echo $OK_MSG
# I do the rm to delete the date tmp file so i can get the $STATE_OK or $STATE_WARNING
rm .$cont-datetmp
exit 0
elif
echo $datenow >> .$cont-datetmp
#Vars to set modification date
datetmp=$(head -n 1 .$cont-datetmp)
diffdate=$(( ($datenow - $datetmp) /60 ))
#This var is to set the time of the critical ERR
days=$((48*60))
[ $diffdate -lt $days ]
then
echo $STATE_WARNING
echo $ERR_WAR
exit 1
else
echo $STATE_CRITICAL
echo $ERR_CRI
exit 2
fi
【问题讨论】: