Metode kedua dengan cara membaca status dari cron log, dengan cara ini lebih sederhana. kita dapat melihat service status dari log cron.
lalu waktu dari log service tersebut di parsing menjadi detik dan dikurangi dengan waktu sekarang.
#!/bin/bash
# Standard Nagios return codes
#OK = 0
#WARNING = 1
#CRITICAL = 2
#UNKNOWN = 3
LOG=/var/log/cron
usage()
{
echo "usage: check_crond [-w warning_value (in minutes)] [-c critical_value (in minutes)] -s services"
echo
echo "check_crond -w 0 -c 5 -s /usr/bin/yum"
echo "critical_value must be greater than warning_value"
exit 3
}
while getopts w:c:s: OPTNAME; do
case "$OPTNAME" in
w)
WARNVAL="$OPTARG"
;;
c)
CRITVAL="$OPTARG"
;;
s)
SERVICES="$OPTARG"
;;
*)
usage
;;
esac
done
#check value
if [ "$WARNVAL" != "" -a "$CRITVAL" != "" ]; then
if [ $CRITVAL -le $WARNVAL ] ; then
echo "Error: critical_value must be greater than warning_value"
echo
usage
exit 3
fi
fi
#check dir
if [ "$SERVICES" = "" ]; then
echo "Error: services must exist do not empty"
echo
usage
exit 3
fi
# Compare
LASTRUN=$(grep $SERVICES $LOG | tail -n 1 | cut -f1 -d '.' | sed -e 's/T/ /')
CHECK=$(((`date +%s` - `date -d "$LASTRUN" +%s`)/60))
HOURS=$(((`date +%s` - `date -d "$LASTRUN" +%s`)/3600))
if [ $CHECK != "" ] ; then
if [ $WARNVAL -ge $CHECK ] ; then
echo "** WARNING **"
echo "last error at $CHECK minutes ago"
exit 1;
fi
if [ $CHECK -gt $CRITVAL ] ; then
echo "** CRITICAL **"
echo "last error at $CHECK minutes ago,$HOURS hours"
exit 2;
fi
else
echo "** OK **";
echo "crond run at $LASTRUN at `hostname`"
fi
exit 0
Comments
Post a Comment