#!/bin/sh ### Monitor free disk space # Display alert if the free percentage of space is >= $ALERT # # Static Config Variables # ALERT=90 # free space percentage to trigger an alert # # Static Binary Paths # DF='/bin/df' GREP='/bin/grep' AWK='/bin/awk' CUT='/bin/cut' HOSTNAME='/bin/hostname' DATE='/bin/date' OSD_CAT='/usr/bin/osd_cat' export DISPLAY=:0.0 # # Static System Variables # THIS_HOST=`${HOSTNAME}` # # Check CLI Options # VERBOSE=false OSD=false for ARG in "$@" ; do case $ARG in "-v") VERBOSE=true ;; "-osd") OSD=true ;; esac done #---------------------------------------------------------------------------- . /etc/osd_cat.cfg || { color=yellow outline=2 outlinecolour=black shadow=0 shadowcolour=black font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" } #---------------------------------------------------------------------------- [ $VERBOSE = true ] && echo "Checking free disk space on ${THIS_HOST}" [ $VERBOSE = true ] && echo "Threshold for warning is ${ALERT}%" [ $VERBOSE = true ] && echo "------------------------------------------------------------------" # Dynamic Variables #DATE_STR=`${DATE} "+%d-%B-%y @ %H%Mhrs"` # Call df to find the used percentages. Grep for only local disks (not remote mounts like nfs or smb) # Pipe the output to awk to get the needed columns, then start a while loop to process each line. $DF -HPl | $GREP -E "^/dev/" | $AWK '{ print $5 " " $6 " " $1 }' | while read OUTPUT ; do USED_PCENT=$(echo ${OUTPUT} | $AWK '{ print $1}' | $CUT -d'%' -f1 ) # Used space as a percentage PARTITION=$(echo ${OUTPUT} | $AWK '{ print $2 }' ) # Mount Point (eg, /home) DEVICE=$(echo ${OUTPUT} | $AWK '{ print $3 }' ) # Device (eg, /dev/sda1 or LABEL or UUID) if [ $VERBOSE = true ] ; then echo -e "Checking device ${DEVICE} which is mounted to ${PARTITION} \t${USED_PCENT}% used" fi if [ ${USED_PCENT} -ge $ALERT ]; then if [ $VERBOSE = true ] ; then echo "WARNING: ${PARTITION} (${DEVICE}) is ${USED_PCENT}% full on ${THIS_HOST}." else echo "WARNING: ${PARTITION} (${DEVICE}) is ${USED_PCENT}% full on ${THIS_HOST}." #| if [ $OSD = true ] && [ ${PARTITION} = / ]; then echo "WARNING: The root (${PARTITION}) partition is ${USED_PCENT}% full on ${THIS_HOST}." | $OSD_CAT --pos=top --offset=40 --align=center --delay=10 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font & fi fi fi done exit 0