Ever wondered if you could make you server send you an email or a sms to your cell phone if it ever went down, or if you logs folder were too big, or any other event that you can think? Well, here's a really simple way of doing so.
In my case, I'll be using two events, one if the server goes down, and another if my logs folder gets too big (I have a very simple Linux box that does not have file rotation).
1- Mayday, server is down
There are two ways we can do this, and it will depend on how often do you need to check if the server is down. If you need it to be done every minute or so, I'd advise using a service instead of crontab. I could not personally say what's the system hog difference, but I'm open for feedbacks. In my case I'll be checking every hour, so I'll use crontab.
Other thing required is a cli email client, and there are many you can use. I choose msmtp, which is extremely easy to configure. Here's what I have set to use my gmail account:
defaults tls on tls_certcheck off logfile ~/.msmtp.log account gmail host smtp.gmail.com port 587 from me@gmail.com auth on user me@gmail.com password ###### account default : gmail |
To send an email is as easy as:
$ echo -e "Subject: Test \n\n This is the message body" | msmtp -v email@address1 email@address2 |
So now that we have means to send the message, let's create the script. Remember that the script will need to be run from another PC and not from the server. A server that is down cannot send emails!!
#!/bin/bash ## pings the server IP. Here I'm using only one ping as some distros ping 4x times (Fedora), and others will ping consecutively by default (Ubuntu) ping -c 1 server ## checks if the ping was successful or not, if not it sends an email and a sms with the last time it tried to ping if [ “$?” != “0” ] ; then echo -e "Subject: Server is down \n\n Victor, \n Server is down. Last time tested was $(date)." | msmtp -v me@adreess.ca 12312345678@cellprovider.com fi |
Now we add the script to your crontab and send any error msg to a txt. Make sure that your account has pinging privileges
$ crontab -e # Check if server is up every hour 0 * * * * /home/user/bin/script.sh 2>> /home/user/var/log/server-up-log.txt |
2- Checking /var/logs size
The process here will be almost the same, however both script and crontab need to be run on the server. Our script should look something like:
#!/bin/bash ## Some txt editing. We will check /var/log size by using “df” and then striping it down to numbers only e=`df -h | grep 'var\/log' | awk '{ print $5 ;}' | sed 's/%//'` ## If the size of /var/log gets higher than 75% we will get an email and a sms if [ "$e" -gt "75" ] ; then echo -e "Subject: Log folder \n\n Victor, \n Log folder has reached 75%" | msmtp -v me@adreess.ca 12312345678@cellprovider.com fi |
Add the script to your crontab on the server and you are done.
Have fun!!!
Vic.
No comments:
Post a Comment