#!/bin/bash # HA-VPN-Supervisor auf gw-aa # Das andere Tunnel-Ende TARGET="gw-ba" # Anzahl Sekunden zwischen den Pings TIMEOUT=1 # Warte MAXFAIL * TIMEOUT, bevor das Backup übernimmt MAXFAIL=5 # Warte HYSTERE * TIMEOUT nach dem Ende eines Fehlers # bevor das Skript auf Normalbetrieb umschaltet HYSTERE=180 # Annahme: Beim Start liegt kein Fehler vor FAIL=0 VERBOSE="" ACTION_FAIL_START="/root/bin/HA-VPN-action-script start" ACTION_OK_AGAIN="/root/bin/HA-VPN-action-script stop" PING=/usr/bin/echoping LOG="/usr/bin/logger -t HA-VPN" math () { eval echo "\$(($*))" } echo "`date +%Y%m%d%H%M%S` `basename $0` starting" | $LOG while : do VAL=`$PING ${VERBOSE} -u -t $TIMEOUT -s 5 ${TARGET} 2>&1` ERROR=$? if [ $ERROR -gt 0 ] ; then echo "$DAT $ERROR $FAIL $VAL" | $LOG # Timeout eingetreten if [ $FAIL -lt 0 ] ; then # Erneuter Fehler während der Erholungsphase FAIL=`math $MAXFAIL + 1` fi if [ $FAIL -eq $MAXFAIL ] ; then # Backup starten : FAIL=`math $FAIL + 1` echo "$DAT starting backup now: ${ACTION_FAIL_START}" | $LOG ${ACTION_FAIL_START} else if [ $FAIL -lt $MAXFAIL ] ; then FAIL=`math $FAIL + 1` fi fi else # Ping war erfolgreich if [ $FAIL -gt $MAXFAIL ] ; then FAIL=`math 0 - $HYSTERE ` fi if [ $FAIL -le $MAXFAIL -a $FAIL -ge 0 ] ; then FAIL=0 fi if [ $FAIL -lt 0 ] ; then # Warte die Hysterese-Zeit ab vor einem Neustart echo "$DAT $ERROR $FAIL $VAL" | $LOG FAIL=`math $FAIL + 1` if [ $FAIL -eq 0 ] ; then # Normalbetrieb wiederherstellen : echo "$DAT normal again now: ${ACTION_OK_AGAIN}" | $LOG ${ACTION_OK_AGAIN} fi fi fi #echo "$DAT $ERROR $FAIL $VAL" | $LOG sleep $TIMEOUT done # wird nie erreicht: exit 0