mwan3track (1420B)
1 #!/bin/sh 2 3 [ -z "$12" ] && echo "Error: should not be started manually" && exit 0 4 5 if [ -e /var/run/mwan3track-$1.pid ] ; then 6 kill $(cat /var/run/mwan3track-$1.pid) &> /dev/null 7 rm /var/run/mwan3track-$1.pid &> /dev/null 8 fi 9 10 echo "$$" > /var/run/mwan3track-$1.pid 11 12 score=$(($7+$8)) 13 track_ips=$(echo $* | cut -d ' ' -f 12-99) 14 host_up_count=0 15 lost=0 16 sleep_time=0 17 18 while true; do 19 20 sleep_time=$6 21 22 for track_ip in $track_ips; do 23 ping -I $2 -c $4 -W $5 -s $9 -q $track_ip &> /dev/null 24 if [ $? -eq 0 ]; then 25 let host_up_count++ 26 else 27 let lost++ 28 fi 29 done 30 31 if [ $host_up_count -lt $3 ]; then 32 let score-- 33 34 if [ $score -lt $8 ]; then 35 score=0 36 else 37 sleep_time=$10 38 fi 39 40 if [ $score -eq $8 ]; then 41 42 logger -t mwan3track -p notice "Interface $1 ($2) is offline" 43 env -i ACTION=ifdown INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface 44 score=0 45 46 fi 47 48 else 49 50 if [ $score -lt $(($7+$8)) ] && [ $lost -gt 0 ]; then 51 52 logger -t mwan3track -p info "Lost $(($lost*$4)) ping(s) on interface $1 ($2)" 53 54 fi 55 56 let score++ 57 lost=0 58 59 if [ $score -gt $8 ]; then 60 score=$(($7+$8)) 61 elif [ $score -le $8 ]; then 62 sleep_time=$11 63 fi 64 65 if [ $score -eq $8 ]; then 66 67 logger -t mwan3track -p notice "Interface $1 ($2) is online" 68 env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface 69 rm /var/run/mwan3track-$1.pid 70 exit 0 71 fi 72 fi 73 74 host_up_count=0 75 sleep $sleep_time 76 done 77 78 exit 1