#!/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; # shellcheck disable=SC1090 source "$config"; set +a; } source_config() { local config=$1; local configFallback=$2; local configGlobalFallback=$3; if [[ -f "$config" ]]; then apply_config "$config"; return; fi if [[ -f "$configFallback" ]]; then apply_config "$configFallback"; return; fi if [[ -f "$configGlobalFallback" ]]; then apply_config "$configGlobalFallback"; return; 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