- 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