[wellylug] server monitoring
Mark Signal
mark at remote-assist.co.nz
Fri Jan 14 08:30:30 NZDT 2005
Hi
many thanks for this - I learnt quite a bit by playing with your first
version. - Had all the core logic mixed with enough errors to make me
think. (whats a few missing "$" between friends :)
this is what I had ended up with :
..and yes I had to manually create pingable file
email=mark at webcoda.com
while [ 1 -eq 1 ]; do
ping -c10 -w 20 $1 > /dev/null 2>&1
retval=$?
if [ $retval -eq 1 ]; then # if the ping receives no reply packets
pingable=$(cat /root/pingable)
if [ $pingable -eq 1 ]; # and the lack of reply has just started
then
echo dead | mail -s "Host has gone down" $email;
echo Host has gone down;
echo '0' > /root/pingable;
fi
elif [ $retval -eq 0 ]; then # if the ping received replies
pingable=$(cat /root/pingable)
if [ $pingable -eq 0 ]; # and hasn't been receiving them
then
echo alive | mail -s "Host is back up" $email;
echo Host is back up;
echo '1' > /root/pingable;
fi
fi
sleep 60
done
I will now play with this one untill I understand it.
Ultimately I will modify it so it first checks for local internet access
and exits if none. I was also thinking that it may make sense to have
the script sleep for 5 minutes after it detects a faluire and try again
and then do its stuff on the second faluire - I'll have to get head
around this new one first.
many thanks for your efforts.
cheers
Mark
jumbophut wrote:
>On Thu, 13 Jan 2005 17:09:12 +1300, Mark Signal wrote:
>
>
>>this is just what I wanted
>>
>>
>>
>Hopefully the following is just what you wanted, since it might
>actually work! The perils of writing code without testing :-) I
>still recommend you test thoroughly on your machine.
>
>Two files. Note you can copy and paste but will need to replace the
>^D chars. They are actually entered using Ctrl-V then Ctrl-D (works
>in vi anyway, don't know about other browsers).
>
>The first just runs in a endless loop and you have to use Ctrl-C to
>cancel it. It pings host and sends any useful info to email. It does
>numping pings each time, and waits delay seconds before repeating the
>cycle, during which time you can cancel.
>
>#!/bin/sh
># Pings domain.or.ip
>host='domain.or.ip'
>email='admin at email.address'
>numpings=3
>delay=5
>state=0
>pingable=0
>notpingable=1
>pingerror=2
>while [ 1 -eq 1 ]; do
> ping -c $numpings $host
> retval=$?
> case $retval in
> $pingable)
> if [ $state -ne $pingable ]; then
> echo "^D" | mail -s "Pingable again" $email
> # your commands here
> fi;;
> $notpingable)
> if [ $state -ne $notpingable ]; then
> echo "^D" | mail -s "No longer pingable" $email
> # your commands here
> fi;;
> *)
> if [ $state -ne $pingerror ]; then
> echo "^D" | mail -s "Unknown ping problem" $email
> # your commands here
> fi;;
> esac
> state=$retval
> printf "Sleeping (hit Ctrl-C here to abort...)\n"
> sleep 5
>done;
>
>The second is suitable for running from a cron file. It only runs
>once, not in a loop. You need to give the same info as in the first,
>but also the name of a state file to write the last state to. It will
>create the file if it doesn't already exist.
>
>#!/bin/sh
>#Pings host
>host='domain.or.ip'
>email='admin at email.address'
>numpings=3
>statefile='/tmp/state'
>pingable=0
>notpingable=1
>pingerror=2
>
># Get state from file
>if [ -e $statefile ]; then
> if [ -w $statefile ]; then
> state=$(cat $statefile | tr '\n' ' ' | sed -e 's/ //')
> else
> printf "State file $statefile is not writable\n"
> printf "Exiting now. Nothing done. \n"
> exit 1
> fi;
>else
> printf "State file $statefile does not exist. Creating now.\n"
> touch $statefile
> if [ $? -ne 0 ]; then
> printf "Could not create file.\n"
> printf "Exiting now. Nothing done. \n"
> exit 2;
> fi;
>fi;
>
>case $state in
>"0") state=0;; # needs conversion to number
>"1") state=1;; # don't know why
>"2") state=2;; # just works if this is done
>*) state=$pingable;; # if file was empty or corrupt, make state pingable
>esac
>
>ping -c $numpings $host
>retval=$?
>case $retval in
>$pingable)
> if [ $state -ne $pingable ]; then
> subject="Pingable again"
> # your commands here
> fi;;
>$notpingable)
> if [ $state -ne $notpingable ]; then
> subject="No longer pingable"
> # your commands here
> fi;;
>*)
> if [ $state -ne $pingerror ]; then
> subject="Unknown ping problem"
> # your commands here
> fi;;
>esac
>if [ "$subject" != "" ]; then
> echo "^D" | mail -s "$subject" $email # note to get ^D, use Ctrl-V, Ctrl-D
> subject=
>fi;
>echo $retval > $statefile
>
>
>
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.6.11 - Release Date: 12/01/2005
More information about the wellylug
mailing list