#!/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 apply_config() { local config=$1; if [[ ! -f "$config" ]]; then echo "No config file specified"; echo ""; usage; exit 1; fi set -a; source "$config"; set +a; } source_config() { local config=$1; local configFallback=$2; local configGlobalFallback=$3; if [[ -f "$config" ]]; then apply_config "$config"; exit 0; fi if [[ -f "$configFallback" ]]; then apply_config "$configFallback"; exit 0; fi if [[ -f "$configGlobalFallback" ]]; then apply_config "$configGlobalFallback"; exit 0; fi } source_config "$1" "$HOME/.disk_space_alert.conf" "/etc/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