#!/usr/bin/env bash # usage usage() { USAGE=$(cat <'. EOF ) echo "$USAGE"; } set -e; HOSTNAME=$(hostname) SUBJECT="[memory $HOSTNAME] memory is low" MEMORY_USAGE_ALERT_MAIL_ADDRESS=""; MEMORY_USAGE_ALERT_THRESHOLD=128; # 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/.memory_usage_alert.conf" # DO NOT TOUCH BELOW free=$(free -mt | grep Total | awk '{print $4}') if [[ "$free" -le $MEMORY_USAGE_ALERT_THRESHOLD ]]; then ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt file=/tmp/top_proccesses_consuming_memory.txt echo -e "Memory on $HOSTNAME is running low ($MEMORY_USAGE_ALERT_THRESHOLD MB is the remaining threshold)!\n\nFree memory: $free MB" | mailx -a "$file" -s "$SUBJECT" "$MEMORY_USAGE_ALERT_MAIL_ADDRESS" fi exit 0