*BSD News Article 74516


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!spool.mu.edu!howland.reston.ans.net!swrinde!elroy.jpl.nasa.gov!ames!tulane.edu!cpk-news-feed4.bbnplanet.com!news.fsu.edu!gold!davis
From: davis@gold (Douglass E. Davis)
Newsgroups: comp.sys.sun.admin,alt.sys.sun,comp.unix.bsd.misc,comp.unix.programmer,comp.unix.bsd.bsdi.misc,comp.unix.admin
Subject: Re: ping script
Date: 23 Jul 1996 15:09:17 GMT
Organization: Florida State University
Lines: 96
Distribution: world
Message-ID: <4t2put$n1i@news.fsu.edu>
References: <Pine.SOL.3.93.960702171209.4062B-100000@gold.acns.fsu.edu> <4sbfat$ll@keyhole.west.spy.net>
NNTP-Posting-Host: gold.acns.fsu.edu
X-Newsreader: TIN [version 1.2 PL2]
Xref: euryale.cc.adfa.oz.au comp.sys.sun.admin:71048 alt.sys.sun:10438 comp.unix.bsd.misc:1261 comp.unix.programmer:39973 comp.unix.bsd.bsdi.misc:4366 comp.unix.admin:45222

The new ping script will not stall when one host is down, but it 
will just mark the host as down, send mail, and keep going with the other 
ipnumbers, when it comes back up it will send mail again.   Thanks for the
help every one.

Here is the new and improved ping script if anybody wants it:

#!/bin/sh

#written by Douglass Davis and others

# names of important people to mail, separated by spaces.
MAIL_TO="ddavis@cis.famu.edu yourname@youraddress.com"

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

rm -f host_down/down*

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

while [ /usr/bin/true ]
do

  for ip in `cat ipnums`
  do

#   first get the description of the current  
#   ip address from the ipdesc file
    desc=`grep -w $ip 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. 

    ping $ip > /dev/null 2>&1
    rc1=$?
    ping $ip > /dev/null 2>&1
    rc2=$?
    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
 
    if [ $rc1 != 0  ] && [ $rc2 != 0 ] && [ $rc3 != 0 ] &&
       [ ! -f host_down/down-$ip ]
    then
       
#     make a file in the host_down directory for this ip address
      touch 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 >> sonar.log
      echo >> sonar.log

    elif  ( [ $rc1 = 0 ] || [ $rc2 = 0 ] || [ $rc3 = 0 ] ) && 
            [ -f host_down/down-$ip ] 
    then
      rm 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 >> sonar.log
      echo >> sonar.log
    fi
  done
  
  #wait 5 Minutes, and do checks again
  sleep 300 
done