UNIX / Linux Shell Script For Monitoring System network with ping command

in Categories Monitoring last updated August 1, 2009
#!/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:
# https://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html
# -------------------------------------------------------------------------
 
# add ip / hostname separated by white 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

Share this on:

39 comment

  1. for i in 192.168.0.{0..25}
    do
                    ping -i 0.3 -c 1 $i
                    if [[ $? -eq 0 ]]
                    then
                            echo "$i is online" `date` >> $HOME/guests.txt
                    fi
    done
  2. # add ip / hostname separated by while space

    should read

    # add ip / hostname separated by white space

    my understanding is that you want a space between hostnames
    not sure what a while space is
    sounds exciting though

  3. 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.

    1. Hi Swati,

      I believe you have entered hostname instead of ip to test it out right?

      If it is unknown hostname , you are probably get this error message. Use IP for the test instead.

  4. 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!!

  5. 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…

  6. I think you’ve missed same characters at the start of the script. Sorry for my terrible english!!
    “imple”—> “# Simple”

  7. 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 ?

Leave a Comment