我正在开发一个 nagios/collectd 检查程序,用于检查每台服务器的时间。我已经编写了 bash 脚本,用于从 Collectd WSP 文件中获取信息,并根据 nagios 服务器时间 ( date +%s
) 对其进行检查。Collectddate +%s
在上次发送后 60 秒发送值。我面临的问题是如何让检查命令计算出,如果值不同步的最大时间为 60 秒,则一切正常,如果值不同步的时间超过 60 秒,则情况危急。
剧本:
在 nagios 服务器上收集时间,并收集其他服务器发送的 WSP 文件。每个命令都返回一个纪元值($time
取自 nagios 服务器,$stime
取自 collectd WSP 文件):
time=`date +%s`
stime=`whisper-fetch --from=$(expr $(date +%s) - 60) --until=$(date +%s) $WSP_PATH | cut -c1-10`
关键 IF 语句。如果这与从 nagios 服务器获取的信息$stime
不匹配,$time
则发送关键信息。我希望这是,如果 nagios 服务器的时间值与 WSP 输出值相比不同步超过 60 秒,则它是关键的,否则是正常的。
if [ "$stime" -ne "$time" ] ; then
echo CRITICAL: Server time is out of sync!
exit $STATE_CRITICAL
fi
确定声明:
echo OK: Server time is in sync
exit $STATE_OK
答案1
将两个时间相减,并检查结果是否大于 60。似乎bash
没有运算符来计算绝对值,因此您必须以两种方式进行比较。
if [ $[time-stime] -gt 60 ] || [ $[stime-time] -gt 60 ] ; then