-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoe_watchdog.sh
53 lines (48 loc) · 1.58 KB
/
poe_watchdog.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
echo "PoE Watchdog Script"
echo
host=$1
interval=$2
multiplier=$3
pin=$4
Help()
{
echo "Syntax: poe_watchdog host interval multiplier pin"
echo
echo "host ip or hostname of device to check"
echo "interval frequency of pings to device"
echo "multiplier threshold of failed pings to reset device"
echo "pin gpio pin to reset device"
echo
exit
}
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]; then Help; else echo "We are testing connectivity to $host."; fi
echo "I will check to see if the host is alive every $interval seconds, and will toggle pin $4 if the ping fails $multiplier times."
echo $pin > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$pin/direction
echo 0 > /sys/class/gpio/gpio$pin/value
fails=0
while true
do
ping -c 1 -w 1 $host > /dev/null
if (( $? == 0 )); then
fails=0
else
fails=$((fails+1))
fi
echo "Counter: $fails"
sleep $interval
if (( fails == $multiplier )); then
fails=0
echo "Failure count exceeded threshold. Toggling pin $pin..."
echo 1 > /sys/class/gpio/gpio60/value
sleep 5
echo 0 > /sys/class/gpio/gpio60/value
echo "Waiting for device to come back online..."
while true
do
ping -c 1 -w 1 $host > /dev/null
if (( $? == 0 )); then break; fi
sleep 1
done
fi
done