#!/bin/bash # # USAGE: # ./check_hddtemp.sh # Nagios script to get the temperatue of HDD from hddtemp # # You may have to let nagios run this script as root # This is how the sudoers file looks in my debian system: # nagios ALL=(root) NOPASSWD:/usr/lib/nagios/plugins/check_hddtemp.sh # # Version 1.0 OK=0 WARNING=1 CRITICAL=2 UNKNOWN=3 function usage() { echo "Usage: ./check_hddtemp.sh " } function check_root() { # make sure script is running as root if [ `whoami` != root ]; then echo "UNKNOWN: please make sure script is running as root" exit $UNKNOWN fi } function check_arg() { # make sure you supplied all 3 arguments if [ $# -ne 3 ]; then usage exit $OK fi } function check_device() { # make sure device is a special block if [ ! -b $DEVICE ];then echo "UNKNOWN: $DEVICE is not a block special file" exit $UNKNOWN fi } function check_warn_vs_crit() { # make sure CRIT is larger than WARN if [ $WARN -ge $CRIT ];then echo "UNKNOWN: WARN value may not be greater than or equal the CRIT value" exit $UNKNOWN fi } function init() { check_root check_arg $* check_device check_warn_vs_crit } function get_hddtemp() { # gets temperature and stores it in $HEAT # and make sure we get a numeric output if [ -x $HDDTEMP ];then HEAT=`$HDDTEMP $DEVICE -n` case "$HEAT" in [0-9]* ) echo "do nothing" > /dev/null ;; * ) echo "UNKNOWN: Could not get temperature from: $DEVICE" exit $UNKNOWN ;; esac else echo "UNKNOWN: cannot execute $HDDTEMP" exit $UNKNOWN fi } function check_heat() { # checks temperature and replies according to $CRIT and $WARN if [ $HEAT -lt $WARN ];then echo "OK: Temperature is below warn treshold ($DEVICE is $HEAT)" exit $OK elif [ $HEAT -lt $CRIT ];then echo "WARNING: Temperature is above warn treshold ($DEVICE is $HEAT)" exit $WARNING elif [ $HEAT -ge $CRIT ];then echo "CRITICAL: Temperature is above crit treshold ($DEVICE is $HEAT)" exit $CRITICAL else echo "UNKNOWN: This error message should never occur, if it does happen anyway, get a new cup of coffee and fix the code :)" exit $UNKNOWN fi } # -- Main -- # HDDTEMP=/usr/sbin/hddtemp DEVICE=$1 WARN=$2 CRIT=$3 init $* get_hddtemp check_heat