Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # +-----------------------------------------------------------------------------------------+
- # | Dit nrpe script checked de IPMI console voor fans en temp status |
- # | Geschreven voor SuperMicro, Prolly Universeel |
- # | Januari 2012 flip hess [email protected] |
- # +-----------------------------------------------------------------------------------------+
- # Global variables:
- PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
- SCRIPT_PATH="${0}"
- ARGS="${#}"
- ARG1="${1}"
- ARG2="${2}"
- ARG3="${3}"
- STATE_OK="0"
- STATE_WARNING="1"
- STATE_CRITICAL="2"
- STATE_UNKNOWN="3"
- # Functions:
- # exit function
- function die()
- {
- # output
- echo -e "Error in ${SCRIPT_PATH}:\n${1}"
- # return state unknown
- exit ${STATE_UNKNOWN}
- }
- # Shows usage function.
- function fShowUsage()
- {
- echo -e "Usage: ${SCRIPT_PATH} [fans|temp <warn> <crit> ]\n
- help Show Usage
- fans Check IPMI FAN status
- temp Check IPMI TEMP status\n
- this plugin is using the installer
- Check IPMI on Linux - [email protected]\n\nVersie 1.0"
- exit ${STATE_UNKNOWN}
- }
- # function FANS
- function fRunFans()
- {
- #check state file
- [ -s /tmp/ipmi-fans ] || \
- { fCheckReset && { echo "WARNING - check has been reset - a new /tmp/ipmi-fans error state file is created" ; exit "${STATE_WARNING}"; };}
- # get info
- local TEMP="$(mktemp)"
- { sudo /usr/bin/ipmitool sdr list all | grep -E '(FAN\ [0-9]\ )' | sed -e 's/|\ [ 0-9 ]\+.\+RPM//g' -e 's/\ \+//g' > ${TEMP} ; } || \
- die "Failed to Get IPMI Fans info!"
- local TOTAL="$( cat "${TEMP}" |grep '|ok' | wc -l )"
- local OLDTOTAL="$( cat /tmp/ipmi-fans | grep '|ok' | wc -l )"
- local DELTA="$( echo "$(( ${TOTAL} - ${OLDTOTAL} ))" | tr -d '-')"
- # diff
- DIFFS="$( diff "${TEMP}" "/tmp/ipmi-fans" | grep -E '(<|>)' | sed -e 's/^>/Old:/g' -e 's/^</New:/g' -e 's/\n/ /g' | paste -s -d ' ' )"
- # make results
- if [ -z "${DIFFS}" ] ; then
- rm ${TEMP}
- echo -e "ALL OK: FAN Status did not change - Total fans: ${TOTAL}"
- exit ${STATE_OK}
- else
- echo -e "CRITICAL: Fan Status has changed: ${DELTA} Fan(s) changed! Total fans OK: ${TOTAL}"
- echo "${DIFFS}"
- exit ${STATE_CRITICAL}
- fi
- return 0
- }
- # function TEMP
- function fRunTemp()
- {
- local WARN="${ARG2}"
- local CRIT="${ARG3}"
- # get systemp
- HEAT="$( /usr/bin/ipmitool sdr list all | grep 'System Temp' | awk -F'|' '{print $2}' | tr -d "a-zA-Z " )"
- # make results
- if [ ${HEAT} -lt ${WARN} ] ; then
- { echo -e "OKAY - System Temperture is ${HEAT} degrees Celsius" ; exit ${STATE_OK}; }
- elif [ ${HEAT} -gt ${WARN} ] && [ ${HEAT} -lt ${CRIT} ] ; then
- { echo -e "WARNING - System Temperture is higher than ${WARN} degrees Celsius: Temperture is now ${HEAT} degrees Celsuis!\n${HEAT}" ; exit ${STATE_WARNING}; }
- elif [ ${HEAT} -gt ${WARN} ] && [ ${HEAT} -gt ${CRIT} ] ; then
- { echo -e "CRITICAL - System Temperture is higher than ${CRIT} degrees Celsius: Temperture is now ${HEAT} degrees Celsius!\n${HEAT}" ; exit ${STATE_CRITICAL}; }
- else
- { echo -e "UNKNOWN! - This plugin SUCKS! - Please check the code for debugging..." ; exit ${STATE_UNKNOWN}; }
- fi
- }
- # resets
- function fCheckReset()
- {
- # Reset state old file
- if [ ! -f /tmp/ipmi-fans ] ; then
- touch /tmp/ipmi-fans
- sudo /usr/bin/ipmitool sdr list all | grep -E '(FAN\ [0-9]\ )' | sed -e 's/|\ [ 0-9 ]\+.\+RPM//g' -e 's/\ \+//g' > /tmp/ipmi-fans
- fi
- return 0
- }
- # The main function.
- function fMain()
- {
- # script o depends on:
- [ -x /usr/bin/ipmitool ] || die "This script depends on IPMITOOL, please install it: \"apt-get install ipmitool\""
- # check if accessible
- if ( ipmitool | grep -qE '(Unable|Could not open device)' ) ; then
- { echo -e "UNKNOWN! - Unable to open BMC Sensors for reading!" ; exit ${STATE_UNKNOWN}; }
- fi
- #get options dmv case
- case ${ARG1} in
- # check fannekes
- fans)
- # check arguments
- [ ${ARGS} = 1 ] || fShowUsage
- # run check
- fRunFans
- ;;
- # check temperture
- temp)
- # check arguments
- [ ${ARGS} = 3 ] || fShowUsage
- { CHECK1="$( echo ${ARG2} | tr -d "[:digit:] ")" && [ -z ${CHECK1} ]; } || die "Please supply only numbers as a warning or critical value!"
- { CHECK2="$( echo ${ARG3} | tr -d "[:digit:] ")" && [ -z ${CHECK2} ]; } || die "Please supply only numbers as a warning or critical value!"
- { [ ${ARG2} -gt 0 ] && [ ${ARG2} -lt 100 ]; } || die "You Suck! Please supply \"reasonable\" values for temperture!"
- { [ ${ARG3} -gt 0 ] && [ ${ARG3} -lt 100 ]; } || die "You Suck! Please supply \"reasonable\" values for temperture!"
- # run check
- fRunTemp
- ;;
- # de rest van de meuk
- help)
- fShowUsage
- ;;
- *)
- fShowUsage
- ;;
- esac
- return 0
- }
- # Start the program:
- fMain
- # Exit with previous return code:
- exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment