#!/usr/bin/env bash # usage usage() { USAGE=$(cat <'. EOF ) echo "$USAGE"; } set -e; HOSTNAME=$(hostname) DISK_SPACE_ALERT_MAIL_ADDRESS=""; DISK_SPACE_ALERT_THRESHOLD=93 DISK_SPACE_ALERT_MOUNTPOINTS=("/") # check for config file source_config() { local config=$1; local configFallback=$2; if [[ ! -f "$config" ]]; then if [[ ! -f "$configFallback" ]]; then echo "No config file specified and could not find default in '$configFallback'!"; echo ""; usage; exit 1; else config=$configFallback; fi fi set -a; source "$config"; set +a; } source_config "$1" "$HOME/.disk_space_alert.conf" for point in "${DISK_SPACE_ALERT_MOUNTPOINTS[@]}" do CURRENT=$(df $point | grep $point | awk '{ print $5}' | sed 's/%//g') CURRENT_SPACE=$(df $point | grep $point | awk '{ print $5}' | sed 's/%//g') CURRENT_INODES=$(df -i $point | grep $point | awk '{ print $5}' | sed 's/%//g') if [ "$CURRENT" -gt "$DISK_SPACE_ALERT_THRESHOLD" ] ; then mailx -s "[disk $HOSTNAME] $point" $DISK_SPACE_ALERT_MAIL_ADDRESS << EOF Your $point partition remaining free space is critically low. Used space: $CURRENT_SPACE%. Used inodes: $CURRENT_INODES%. EOF fi done