#!/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 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=$(/opt/vc/bin/vcgencmd 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, Crit: $CRIT" 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