110 lines
2.2 KiB
Bash
Executable File
110 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# USAGE:
|
|
# ./check_hddtemp.sh <device> <warn> <crit>
|
|
# 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 <device> <warn> <crit>"
|
|
}
|
|
|
|
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 2>/dev/null`
|
|
case "$HEAT" in
|
|
[0-9]* )
|
|
echo "do nothing" > /dev/null
|
|
;;
|
|
* )
|
|
echo "OK: Could not get temperature from: $DEVICE"
|
|
exit $OK
|
|
;;
|
|
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
|