#!/bin/bash # # Created by Jonny007-MKD 2020-10-03 echoerr() { echo "$@" 1>&2; } pathToBc=$(command -v bc) if [ $? -ne 0 ]; then echoerr Please install bc exit -2 fi pathToVcGenCmd=/usr/bin/vcgencmd if [ ! -x "$pathToVcGenCmd" ]; then pathToVcGenCmd=/opt/vc/bin/vcgencmd fi if [ ! -x "$pathToVcGenCmd" ]; then pathToVcGenCmd=$(which vcgencmd 2> /dev/null) fi if [ ! -x "$pathToVcGenCmd" ]; then echoerr Cannot find vcgencmd exit -3 fi WARN=50 CRIT=70 FAHRENHEIT=false DEBUG=false while [[ $# -gt 0 ]]; do case $1 in -w|--warn|--warning) case "$2" in ''|*[!0-9]*) echoerr "Value for \"$1\" has to be a number"; exit -3;; esac WARN=$2 shift ;; -c|--crit|--critical) case "$2" in ''|*[!0-9]*) echoerr "Value for \"$1\" has to be a number"; exit -3;; esac CRIT=$2 shift ;; -f|--fahrenheit) FAHRENHEIT=true ;; -d|--debug) DEBUG=true ;; -?|--help) echo "Check /proc/mdstat. Arguments:" echo "--warning $WARN: Temperature above which the result is warning" echo "--critical $CRIT: Temperature above which the result is critical" echo "--fahrenheit: All temperatures in Fahrenheit (°F)" exit 0 ;; esac shift done if [ $CRIT -le $WARN ]; then echoerr "Critical threshold ($CRIT) has to be greater than Warning threshold ($WARN)" exit -3 fi function log { if $DEBUG; then echo " > $@" fi } NL=$'\n' output=$($pathToVcGenCmd measure_temp) result=$? log vcgencmd: $result. $output if [ $result -ne 0 ]; then echoerr "vcgencmd returned $result" exit $result fi temp=${output/temp=/} temp=${temp/\'C/} unit="C" if $FAHRENHEIT; then temp=$(bc <<< "scale=1; ($temp * 1.8) + 32") unit="F" fi log "$temp'$unit. Warn: $WARN'$unit, Crit: $CRIT'$unit" c=$(bc <<< "$temp > $CRIT") w=$(bc <<< "$temp > $WARN") if [ $c -eq 1 ]; then result="CRITICAL" elif [ $w -eq 1 ]; then result="WARNING" else result="OK" fi echo "$result. $temp'$unit | 'temperature'=$temp$unit;$WARN;$CRIT;-40;85" case $result in OK) exit 0;; WARNING) exit 1;; CRITICAL) exit 2;; esac