#!/bin/bash # PURPOSE: Script to check temperature of installed hard drives and report/shutdown if specified temperatures exceeded # # AUTHOR: feedback[AT]HaveTheKnowHow[DOT]com # Expects three arguments: # 1. Warning temperature # 2. Critical shutdown temperature # 3. If argument 3 is present then just check that drive letter # eg. using ./DriveTemps.sh 35 45 # will warn when temperature of one or more drives reaches 35degrees and shutdown when any one of them hits 45 # eg. using ./DriveTemps.sh 35 45 c # will warn when temperature of drive sdc reaches 35degrees and shutdown when it hits 45 # NOTES: # Change the string ">>/home/htkh" as required # Substitute string "myemail@myaddress.com" with your own email address in the string which starts "/usr/sbin/ssmtp myemail@myaddress.com" # Change the command MyList='a b c d e' to the number of drives you have. In this case I'm using 6 drives # Assumes /usr/sbin/smartctl -n standby -a /dev/sd$i returns the string 'Temperature_Celsius' somewhere echo "JOB RUN AT $(date)" echo '============================' echo '' echo 'Drive Warning Limit set to =>' $1 echo 'Drive Shutdown Limit set to =>' $2 echo '' echo '' if [ $# -eq 2 ] then MyList='a b c d e' echo 'Testing all drives' else MyList=($3) echo 'Testing only the system drive' fi echo '' for i in $MyList do echo 'Drive /dev/sd'$i /usr/sbin/smartctl -n standby -a /dev/sd$i | grep Temperature_Celsius done echo '' echo '' for i in $MyList do #Check state of drive 'active/idle' or 'standby' stra=$(/sbin/hdparm -C /dev/sd$i | grep 'drive' | awk '{print $4}') echo 'Testing Drive sd'$i if [ ${stra} = 'standby' ] then echo ' Drive sd'$i 'is in standby' echo '' else str1='/usr/sbin/smartctl -n standby -a /dev/sd'$i str2=$($str1 | grep Temperature_Celsius | awk '{print $10}') if [ ${str2} -ge $1 ] then echo '============================' >>/home/htkh/Desktop/DriveWarning.Log echo $(date) >>/home/htkh/Desktop/DriveWarning.Log echo '' >>/home/htkh/Desktop/DriveWarning.Log echo 'WARNING: TEMPERATURE FOR DRIVE sd'$i 'EXCEEDED' $1 '=>' $str2 >>/home/htkh/Desktop/DriveWarning.Log echo '' >>/home/htkh/Desktop/DriveWarning.Log echo '============================' >>/home/htkh/Desktop/DriveWarning.Log fi if [ ${str2} -ge $2 ] then echo '============================' echo '' echo 'CRITICAL: TEMPERATURE FOR DRIVE sd'$i 'EXCEEDED' $2 '=>' $str2 echo '' echo '============================' /sbin/shutdown -h now /usr/sbin/ssmtp myemail@myaddress.com ' $str2 echo '' fi fi done echo 'All Drives are within limits' echo ''