- Free disk space
- CPU load
You can create the two scripts below and edit the MAILTO and TRIGGER variables to suit your needs /usr/local/bin/monitor-load.sh:
#!/bin/bash
TRIGGER=2.00
MAILTO=mail@somedomain.com
host=`hostname -f`
load=`cat /proc/loadavg | awk '{print $2}'`
response=`echo | awk -v T=$TRIGGER -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`
if [[ $response = "greater" ]]
then
#capture top command output for the mail body
body=`top -n 1 -b`
echo "$body\n."|mail -s "High load on $host - [ $load ]" $MAILTO
fi
/usr/local/bin/monitor-disk-usage.sh:#!/bin/bash
MAILTO=mail@somedomain.com
TRIGGER=80
HOST=`hostname -f`
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$TRIGGER" ] ; then
mail -s "Disk Space Alert for $HOST" $MAILTO << EOF
The root partition of '$HOST' remaining free space is critically low. Used: $CURRENT%
EOF
fi
Make these two scripts executable:
chmod +x /usr/local/bin/monitor-load.sh chmod +x /usr/local/bin/monitor-disk-usage.shNow schedule these script in system cron jobs:
/etc/cron.d/monitor:
# Check server load and diskspace * * * * * root /usr/local/bin/monitor-load.sh 0 7,16 * * * root /usr/local/bin/monitor-disk-usage.shThis will check the server load every minute and disk space at 7am and 4pm. Finally it's wise to test if mails sent from console arrive. Change the e-mail address in this command and run it:
echo "."|mail -s "Test mail from console" mail@somedomain.com