#!/bin/bash # Simple SHELL script for Linux and UNIX system monitoring with # ping command # ------------------------------------------------------------------------- # Copyright (c) 2006 nixCraft project <http://www.cyberciti.biz/fb/> # This script is licensed under GNU GPL version 2.0 or above # ------------------------------------------------------------------------- # This script is part of nixCraft shell script collection (NSSC) # Visit http://bash.cyberciti.biz/ for more information. # ------------------------------------------------------------------------- # Setup email ID below # See URL for more info: # http://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html # ------------------------------------------------------------------------- # add ip / hostname separated by while space HOSTS="cyberciti.biz theos.in router" # no ping request COUNT=1 # email report when SUBJECT="Ping failed" EMAILID="me@mydomain.com" for myHost in $HOSTS do count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') if [ $count -eq 0 ]; then # 100% failed echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID fi done
Want to read Linux tips and tricks, but don't have time to check our blog everyday? Subscribe to our email newsletter to make sure you don't miss a single tip/tricks.
- Download Script
- Email this to a friend
- Rss Feed
- Last Updated: 05/6/08
{ 14 comments… read them below or add one }
This is great – it really fulfills a need I have. I’m working on expanding it to include the case “unknown host”…
I keep getting syntax error: unexpected end of file. Not sure why. The script seems correct to me.
Christian, if you add a newline at the end of the file it’ll probably be fine; some shells expect this.
Hi,
I create the file monitor.sh , set permission 755 , and run ./monitor.sh .
the system reply :
./monitor.sh: line 1: imple: command not found
can anyone help me ?
I think you’ve missed same characters at the start of the script. Sorry for my terrible english!!
“imple”—> “# Simple”
use this if you like neat one liners:
[ $(ping -c1 $1 -W1 -w1 | awk '/received/ {print $4}') -eq 1 ] && echo “ONLINE” || echo “OFFLINE”
Hi, great work..
Your script work very well :D
thx :-)
hi
im new to shell scripts and im unable to understand the above code
can anyone please explain the code above
Great script! But I can’t get it to send an e-mail. I’ve just installed mailx, but don’t I need to specify the smtp-server for this to work?? I’ve tried the man-pages and googled around a bit, but I can’t find a solution…
After doing much much more googling I’ve finally found how to send mail. For the joys of others: you can do this by installing ssmtp and mailx.
If ssmtp gives you hell installing it (like it did with me), then you should check the hostname of the computer. You can find this in /etc/hosts and you should have a line something like:
“127.0.0.1 yourhost.domain.local yourhost” (and use # to comment the rest out)
After this you should be able to install ssmtp by typing:
dpkg –purge ssmtp
apt-get install ssmtp
configure the ssmtp.conf that is in /etc/ssmtp and should look like this:
root=
mailhub=
rewritedomain=
hostname=
And after all this, you can check if it works by typing:
mail
and ending the mail by typing “.”
Good luck!!
I am getting an error
line 9: [: -eq: unary operator expected
Can someone help me on this
@Swati
This normally happens when a host in the HOSTS variable is not known for the machine.
I’ll pose a silly question: is there a technique to return a result if the ping attempt fails fr the *local* pc?
I’m attempting to adapt this script to troubleshoot/log a perceived flaky router (somehow still keeping the LAN-side running, abet very slow…), but as Swati & pituhdo have pointed out, it falls face down when the local connection fails.
For IP address it will only return 0 (100% fail) or number of packets. Are you using hostname?