Archive

Posts Tagged ‘Linux’

CPU Monitoring Script

June 27th, 2009 No comments

Have you ever had a rogue process chew up all the CPU on your Linux server for a days and nobody notice?

This happens to me quite a lot so I decided to write a bash script that looks for these processes and send an alert email.

#!/bin/bash

#
# cpumon - monitors CPU usage and sends an alert email if limit is exceeded
#
# 2009 - martin [at] teamburns [dot] com
#

host=`hostname`
file="/tmp/cpumon.txt"

rm $file > /dev/null 2>&1

function sendEmail() {
   subject="High CPU on $host"
   /usr/bin/mail -s "$subject" user@domain.com < $file
}

while read a b c
do
   pid="$a"
   cmd="$b"
   cpu_percentage="$c"

   if [[ -z "$cpu_percentage" ]]
   then
      echo "process $pid $cmd is using less than zero percent of the cpu!"
      continue
   else
      cpu_percentage_integer=$(echo "$cpu_percentage"|sed 's/^\([^\.]*\)\..*$/\1/')
   fi

   if [[ $cpu_percentage_integer -gt 10 ]]
   then
      echo "$pid $cmd is using $cpu_percentage_integer percent of our CPU" >> $file
   fi
done <<< "`ps --no-heading -eo pid,comm,pcpu`"

if [[ -f $file ]]
then
   sendEmail
fi

This script can be scheduled to run periodically by placing an entry in the crontab file. Make sure use replace username with a valid name:

*/30 *  * * *   username    /home/username/cpumon >/dev/null 2>&1
Categories: Linux Tags: , ,