#!/bin/sh # Simon's nasty watchdog script. #this could be done a lot better.. but I'm a shitty scripter #setup the devices, so we know what we're working with Device1=router Device2=p333 Device3=clarissa Device4=sabrina Device5=games Device6=shiva Device7=sparc #setup IP addresses of pingable devices.. Device1IP=192.168.0.1 Device2IP=192.168.0.2 Device3IP=192.168.0.3 Device4IP=192.168.0.4 Device5IP=192.168.0.5 Device6IP=192.168.0.6 Device7IP=192.168.0.7 #setup check files.. Device1Check=/tmp/D1Check Device2Check=/tmp/D2Check Device3Check=/tmp/D3Check Device4Check=/tmp/D4Check Device5Check=/tmp/D5Check Device6Check=/tmp/D6Check Device7Check=/tmp/D7Check #setup some other variables we're going to need Log=/var/log/watchdog Switch=/usr/local/bin/lptout #check all the devices.. Device1Status=`fping $Device1IP | grep alive` Device2Status=`fping $Device2IP | grep alive` Device3Status=`fping $Device3IP | grep alive` Device4Status=`fping $Device4IP | grep alive` Device5Status=`fping $Device5IP | grep alive` Device6Status=`fping $Device6IP | grep alive` Device7Status=`fping $Device7IP | grep alive` #dump the time in the log, so we know when the following happened.. echo `date` >> $Log #work out what's going on with each.. if [ "$Device1Status" ];then echo "$Device1 is alive" >> $Log else echo "$Device1 seems to be down" >> $Log Device1DownCount=`cat $Device1Check` if [ ! "$Device1DownCount" ];then touch $Device1Check Device1DownCount=0 fi Device1DownCount=`expr $Device1DownCount + 1` echo $Device1DownCount > $Device1Check if [ "$Device1DownCount" -eq 5 ];then echo "$Device1 meets criteria for reset" >> $Log Device1Reset=YES fi fi if [ "$Device2Status" ];then echo "$Device2 is alive" >> $Log else echo "$Device2 seems to be down" >> $Log Device2DownCount=`cat $Device2Check` if [ ! "$Device2DownCount" ];then touch $Device2Check Device2DownCount=0 fi Device2DownCount=`expr $Device2DownCount + 1` echo $Device2DownCount > $Device2Check if [ "$Device2DownCount" -eq 5 ];then echo "$Device2 meets criteria for reset" >> $Log Device2Reset=YES fi fi if [ "$Device3Status" ];then echo "$Device3 is alive" >> $Log else echo "$Device3 seems to be down" >> $Log Device3DownCount=`cat $Device3Check` if [ ! "$Device3DownCount" ];then touch $Device3Check Device3DownCount=0 fi Device3DownCount=`expr $Device3DownCount + 1` echo $Device3DownCount > $Device3Check if [ "$Device3DownCount" -eq 5 ];then echo "$Device3 meets criteria for reset" >> $Log Device3Reset=YES fi fi if [ "$Device4Status" ];then echo "$Device4 is alive" >> $Log else echo "$Device4 seems to be down" >> $Log Device4DownCount=`cat $Device4Check` if [ ! "$Device4DownCount" ];then touch $Device4Check Device4DownCount=0 fi Device4DownCount=`expr $Device4DownCount + 1` echo $Device4DownCount > $Device4Check if [ "$Device4DownCount" -eq 5 ];then echo "$Device4 meets criteria for reset" >> $Log Device4Reset=YES fi fi if [ "$Device5Status" ];then echo "$Device5 is alive" >> $Log else echo "$Device5 seems to be down" >> $Log Device5DownCount=`cat $Device5Check` if [ ! "$Device5DownCount" ];then touch $Device5Check Device5DownCount=0 fi Device5DownCount=`expr $Device5DownCount + 1` echo $Device5DownCount > $Device5Check if [ "$Device5DownCount" -eq 5 ];then echo "$Device5 meets criteria for reset" >> $Log Device5Reset=YES fi fi if [ "$Device6Status" ];then echo "$Device6 is alive" >> $Log else echo "$Device6 seems to be down" >> $Log Device6DownCount=`cat $Device6Check` if [ ! "$Device6DownCount" ];then touch $Device6Check Device6DownCount=0 fi Device6DownCount=`expr $Device6DownCount + 1` echo $Device6DownCount > $Device6Check if [ "$Device6DownCount" -eq 5 ];then echo "$Device6 meets criteria for reset" >> $Log Device6Reset=YES fi fi if [ "$Device7Status" ];then echo "$Device7 is alive" >> $Log else echo "$Device7 seems to be down" >> $Log Device7DownCount=`cat $Device7Check` if [ ! "$Device7DownCount" ];then touch $Device7Check Device7DownCount=0 fi Device7DownCount=`expr $Device7DownCount + 1` echo $Device7DownCount > $Device7Check if [ "$Device7DownCount" -eq 5 ];then echo "$Device7 meets criteria for reset" >> $Log Device7Reset=YES fi fi #ok, now we need to work out what we're going to do based on the reset flags.. #worst case scenario.. if [ "$Device1Reset" = "YES" -a "$Device2Reset" = "YES" -a "$Device3Reset" = "YES" -a "$Device4Reset" = "YES" -a "$Device5Reset" = "YES" -a "$Device6Reset" = "YES" -a "$Device7Reset" = "YES" ];then echo "Oh shit! everything is down!" >> $Log echo "Either we've lost our network" >> $Log echo "Or a hub/switch has shit itself" >> $Log echo "Now resetting the hub/switch power" >> $Log $Switch #combo of hub power data line #reset the fail counts.. echo "0" > $Device1Check echo "0" > $Device2Check echo "0" > $Device3Check echo "0" > $Device4Check echo "0" > $Device5Check echo "0" > $Device6Check echo "0" > $Device7Check #reset the reset flag, to avoid everything being bounced later Device1Reset=NO Device2Reset=NO Device3Reset=NO Device4Reset=NO Device5Reset=NO Device6Reset=NO Device7Reset=NO fi #now we work with individual failures if [ "$Device1Reset" = "YES" ];then echo "$Device1 now being reset" >> $Log $Switch 1 sleep 3 $Switch 0 echo "cross your fingers, $Device1 is now rebooting" >> $Log echo "0" > $Device1Check fi if [ "$Device2Reset" = "YES" ];then echo "$Device2 now being reset" >> $Log $Switch 2 sleep 3 $Switch 0 echo "cross your fingers, $Device2 is now rebooting" >> $Log echo "0" > $Device2Check fi if [ "$Device3Reset" = "YES" ];then echo "$Device3 now being reset" >> $Log $Switch 4 sleep 3 $Switch 0 echo "cross your fingers, $Device3 is now rebooting" >> $Log echo "0" > $Device3Check fi if [ "$Device4Reset" = "YES" ];then echo "$Device4 now being reset" >> $Log $Switch 8 sleep 3 $Switch 0 echo "cross your fingers, $Device4 is now rebooting" >> $Log echo "0" > $Device4Check fi if [ "$Device5Reset" = "YES" ];then echo "$Device5 now being reset" >> $Log $Switch 16 sleep 3 $Switch 0 echo "cross your fingers, $Device5 is now rebooting" >> $Log echo "0" > $Device5Check fi if [ "$Device6Reset" = "YES" ];then echo "$Device6 now being reset" >> $Log $Switch 32 sleep 3 $Switch 0 echo "cross your fingers, $Device6 is now rebooting" >> $Log echo "0" > $Device6Check fi if [ "$Device7Reset" = "YES" ];then echo "$Device7 now being reset" >> $Log $Switch 64 sleep 3 $Switch 0 echo "cross your fingers, $Device7 is now rebooting" >> $Log echo "0" > $Device7Check fi