Skip to content

Instantly share code, notes, and snippets.

@adamjakab
Created November 24, 2014 12:07
Show Gist options
  • Save adamjakab/10b5c68c10df1292f24d to your computer and use it in GitHub Desktop.
Save adamjakab/10b5c68c10df1292f24d to your computer and use it in GitHub Desktop.
Main cpu monitoring script
#!/bin/bash
#
# Author: Adam Jakab
# Description: Monitors CPU load and executes external script on exceeded treshold.
#
# Log file
LOGFILE="/var/log/cpumon/cpumon.log"
# Define Threshold
MAX_AVG_THRESHOLD=25
# Interval between checks(in seconds)
SLEEP_BETWEEN_CHECKS=30
# Script to execute when system becomes critical
CRITICAL_RECOVERY_SCRIPT="/data_mount_1/cpumon/recoverSystem.sh"
# Using 5min average for check
#CPULOADAVG_1=$(awk '{ print $1 }' /proc/loadavg)
#CPULOADAVG_5=$(awk '{ print $2 }' /proc/loadavg)
#CPULOADAVG_15=$(awk '{ print $3 }' /proc/loadavg)
#CPULOADAVG=${CPULOADAVG_5%.*}
# Main execution thread
while :
do
CPULOADAVG_5=$(awk '{ print $2 }' /proc/loadavg)
CPULOADAVG=${CPULOADAVG_5%.*}
logMessage="CPU LOAD($(date)): ${CPULOADAVG}/${MAX_AVG_THRESHOLD}"
if [ "${CPULOADAVG}" -ge "${MAX_AVG_THRESHOLD}" ]; then
logMessage="${logMessage} - CRITICAL!"
echo "${logMessage}" | tee -a ${LOGFILE}
echo "STARTING RECOVERY($(date))..." | tee -a ${LOGFILE}
RECOVERY_LOGFILE="/var/log/cpumon/recovery-$(date +%Y%m%d_%H%M%S).log"
${CRITICAL_RECOVERY_SCRIPT} > ${RECOVERY_LOGFILE} 2>&1
echo "RECOVERY FINISHED($(date))..." | tee -a ${LOGFILE}
else
logMessage="${logMessage} - OK"
echo "${logMessage}" | tee -a ${LOGFILE}
fi
sleep ${SLEEP_BETWEEN_CHECKS}
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment