#!/usr/bin/env bash # usage usage() { USAGE=$(cat < /dev/null || { echo "Requiring 'hostname' but it's not installed"; exit 1; } type free &> /dev/null || { echo "Requiring 'free' but it's not installed"; exit 1; } } MEMORY_USAGE_ALERT_THRESHOLD=512; source_config "$HOME/.memory_usage_alert.conf" "/etc/memory_usage_alert.conf" check_required HOSTNAME=$(hostname) SUBJECT="[memory $HOSTNAME] memory is low" # DO NOT TOUCH BELOW total=$(free -mt | grep Total | awk '{print $2}') used=$(free -mt | grep Total | awk '{print $3}') # shellcheck disable=SC2004 free=$(($total-$used)) 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 fileContents=$(cat ${file}) MESSAGE=$(echo -e "Memory on $HOSTNAME is running low ($MEMORY_USAGE_ALERT_THRESHOLD MB is the remaining threshold)!\n\nFree memory: $free MB\n\n${fileContents}") notifier "${SUBJECT}" "${MESSAGE}" fi exit 0