check crond nagios plugin

kasus:
Dalam server produksi menjalankan service secara otomatis menggunakan crond, masalah muncul bila crond mati atau gagal menjalan kan service.
maka saya buat plugins untuk check crond service berdasarkan log file, mengikuti referensi
http://rubypond.com/blog/bash-script-to-check-timestamp-on-logfile
saya rubah sesuai kebutuhan.
di dalam crond file, buat agar service menghasilkan dua file, log file dan error log file
/path/to/myscript > /var/log/myscript 2>&1; echo $? > /var/log/myscript-error-code

#!/bin/bash
# Standard Nagios return codes
#OK       = 0
#WARNING  = 1
#CRITICAL = 2
#UNKNOWN  = 3

usage()
{
        echo "usage: check_crond [-w warning_value (in minutes)] [-c critical_value (in minutes)] [-d log_path] [ -l log_file] [-e error_log_file]"
        echo
        echo "check_crond -w 0 -c 5 -d /var/log -l my_log_file -e my_error_log_file"
        echo
        echo "warning value must less than critical value"
        exit 3
}

while getopts w:c:d:l:e: OPTNAME; do
        case "$OPTNAME" in
        w)
                WARNVAL="$OPTARG"
                ;;
        c)
                CRITVAL="$OPTARG"
                ;;
        d)
                LOGDIR="$OPTARG"
                ;;
        l)
                LOGFILE="$OPTARG"
                ;;
        e)
                LOGERROR="$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"
                exit 3
        fi
fi

# Compare
if [[ $(find $LOGDIR -name $LOGERROR) ]] ; then

        # Get last change time stamp from log and error file
        RUN=`stat -c %y $LOGDIR/$LOGFILE | cut -f1 -d '.'`
        ERROR=`stat -c %y $LOGDIR/$LOGERROR | cut -f1 -d '.'`

        # Convert date into second 
        MIN_RUN=`date -d "$RUN" +%s`
        MIN_ERROR=`date -d "$ERROR" +%s`

        if [ $MIN_ERROR -gt $MIN_RUN ] ; then
                MINUTES_SINCE=$(((`date +%s` - `date -d "$ERROR" +%s`)/60))

                if [ $MINUTES_SINCE -ge $WARNVAL ] ; then
                        echo "** WARNING **"
                        echo "last error at $MINUTES_SINCE minutes ago"
                        exit 1;
                fi

                if [ $MINUTES_SINCE -gt $CRITVAL ] ; then
                        echo "** CRITICAL **"
                        echo "last error at $MINUTES_SINCE minutes ago"
                        exit 2;
                fi
                else
                        echo "** OK **";
                        echo "crond run at $RUN at `hostname`"
        fi

        else
                echo "Error: file not found, please put the right path file"
                exit 3
fi
exit 0

Comments