Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # add ip or hostname space separated
- HOSTLIST="example.com 8.8.8.8"
- # email report
- MAILTO="[email protected]"
- MAILFROM="[email protected]"
- USER_HOME="/Users/YOU/"
- # number of ping requests, timeout in seconds and a threshold
- COUNT=5
- TIMEOUT=2
- MAXFAIL=2
- # ip to use to check if *this* machine can ping (8.8.4.4 is google dns)
- CONTROLIP="8.8.4.4"
- #
- let "THRESHOLD = $COUNT - $MAXFAIL"
- ping -c 1 -W $TIMEOUT $CONTROLIP > /dev/null && for HOST in $HOSTLIST
- do
- count=$(ping -c $COUNT -W $TIMEOUT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
- if [ $count -lt $THRESHOLD ] ; then
- # too many ping failed but control is up: if previously up->failed-once, if failed-once->down
- if [ -f $USER_HOME.up-$HOST ]; then
- mv $USER_HOME.up-$HOST $USER_HOME.failed-once-$HOST
- else
- if [ -f $USER_HOME.failed-once-$HOST ]; then
- mv $USER_HOME.failed-once-$HOST $USER_HOME.down-$HOST
- echo "Host : $HOST is down (ping failed) at $(date)" | mailx -s "Alert: $HOST is down" $MAILTO
- else
- # is it down or a new host -> failed-once
- if [ ! -f $USER_HOME.down-$HOST ]; then
- touch $USER_HOME.failed-once-$HOST
- fi
- fi
- fi
- else
- # most ping ok, host is up: if !up -> up
- if [ ! -f $USER_HOME.up-$HOST ]; then
- if [ -f $USER_HOME.failed-once-$HOST ]; then
- rm $USER_HOME.failed-once-$HOST
- else
- if [ -f $USER_HOME.down-$HOST ]; then
- rm $USER_HOME.down-$HOST
- echo "Host : $HOST is up again (ping ok) at $(date)" | mailx -s "Alert: $HOST is UP again" $MAILTO
- fi
- fi
- touch $USER_HOME.up-$HOST
- fi
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement