*BSD News Article 81503


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!news.mira.net.au!news.netspace.net.au!news.mel.connect.com.au!munnari.OZ.AU!news.Hawaii.Edu!news.uoregon.edu!newsfeed.orst.edu!richie.supra.com!uunet!in2.uu.net!news.iij.ad.jp!news.dnsa.or.jp!usenet
From: Ricky Roque <ricky@dynanet.ad.jp>
Newsgroups: comp.unix.bsd.bsdi.misc
Subject: Re: ping script
Date: Fri, 25 Oct 1996 16:34:52 +0900
Organization: Dynanet Services Asia
Lines: 110
Message-ID: <32706D9C.2B94@dynanet.ad.jp>
References: <32675AB1.2CCD@netdirect.net>
Reply-To: ricky@dynanet.ad.jp
NNTP-Posting-Host: dhcp045.dynanet.ad.jp
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mailer: Mozilla 3.0Gold (Win95; I)
To: mrw@netdirect.net

Mark Wilson wrote:
> 
> I saw some traffic a while back about a ping script. Did anyone ever
> come up with one that worked?
> 
> Mark Wilson
> mrw@netdirect.net

I use this one I took from this discussion group(I think), and it works. 

---------------------------
#!/bin/sh
#written by Douglass Davis and others

# names of important people to mail, separated by spaces.
MAIL_TO="ricky@dnsa.or.jp"

if [  ! -d /home/ricky/sonar/host_down ]; then
  echo $0:  a directory called host_down
  echo $0:  must be in the sonar directory.
  exit 1
fi

rm -f /home/ricky/sonar/host_down/down*

echo `date`: $0 started >> /home/ricky/sonar/sonar.log
echo --------------------------->> /home/ricky/sonar/sonar.log
echo >> /home/ricky/sonar/sonar.log

#while [ /usr/bin/true ]
#do

  for ip in `cat /home/ricky/sonar/ipnums`
  do

#   first get the description of the current
#   ip address from the ipdesc file
    desc=`grep -w $ip /home/ricky/sonar/ipdesc`
    if [ $? != 0 ]
    then
      desc=`echo $ip: no description available`
    fi
      desc=`echo \"$desc\"`

#   do 3 pings.  Even if there is a good connection,
#   there is a chance a ping or two  may not respond.

    /usr/etc/ping $ip > /dev/null 2>&1
    rc1=$?
    /usr/etc/ping $ip > /dev/null 2>&1
    rc2=$?
    /usr/etc/ping $ip > /dev/null 2>&1
    rc3=$?

#   do this part if no pings came back, and there is no file
#   in the ipnums directory indicating host was down already

    echo $rc1 
    if [ $rc1 != 0  ] && [ $rc2 != 0 ] && [ $rc3 != 0 ] &&
       [ ! -f /home/ricky/sonar/host_down/down-$ip ]
    then
       
#     make a file in the host_down directory for this ip address
      touch /home/ricky/sonar/host_down/down-$ip
 

#     mail important people
      echo "`date` PING TO $desc FROM `hostname` DID NOT RETURN" | fmt |
mail -s "`hostname` communications error" $MAIL_TO

#     do a display to the screen
      echo sonar: ping to $desc did not return
      echo 

#     add to log
      echo `date`: PING TO $desc DID NOT RETURN | fmt >>
/home/ricky/sonar/sonar.log
      echo >> /home/ricky/sonar/sonar.log

    elif  ( [ $rc1 = 0 ] || [ $rc2 = 0 ] || [ $rc3 = 0 ] ) &&
            [ -f /home/ricky/sonar/host_down/down-$ip ]
    then
      rm /home/ricky/sonar/host_down/down-$ip

#     mail important people
      echo "`date` PING TO $desc  from `hostname` RETURNED
communications recovered" | fmt | mail -s "`hostname` communications
recovery" $MAIL_TO

#     do a display to the screen
      echo sonar: ping to $desc returned, communications recovered

#     add to log
      echo `date`: echo PING TO $desc RETURNED | fmt >>
home/ricky/sonar/sonar.log
      echo >> /home/ricky/sonar/sonar.log
    fi
  done
  
  #wait 5 Minutes, and do checks again
#  sleep 300
#done
-------------------

Hope it helps.

-- 
ricardo roque		      ikebukuro,tokyo	
dynanet services asia	      japan
ricky@dynanet.ad.jp