Mon script est exécuté toutes les 5 minutes, si le Ping échoue le client DHCP est relancé une fois. A l’exécution suivante (donc 5 minutes après) si le Ping échoue toujours alors le client dhcp est de nouveau relancé. En pratique le client dhcp est donc relancé toutes les 5 minutes tant que la connexion n’est pas rétablie.
En gros il n’y a pas d’état sauvegardé entre les exécutions (pour éviter les effets inattendus).
#!/bin/vbash
run=/opt/vyatta/bin/vyatta-op-cmd-wrapper
# The list of hosts to ping
PING_HOSTS="www.cloudflare.com www.google.com"
# Reading the default gateway
read _ _ GATEWAY _ < <(/sbin/ip -4 route list match 0/0)
# Pinging hosts, stopping at the first answer
for HOST in $PING_HOSTS; do
logger -t watchdog -p info "Pinging $HOST"
/bin/ping -c4 $HOST > /dev/null 2>&1
if [ $? -ne 0 ]; then
logger -t watchdog -p warn "Failed pinging $HOST"
else
exit 0
fi
done
# If we are here, then nothing is pinging. Try
# the default gateway
/bin/ping -c4 $GATEWAY > /dev/null 2>&1
if [ $? -ne 0 ]; then
logger -t watchdog -p err "Internet connection is broken"
$run renew dhcp interface eth1.832
fi
Et similaire pour IPv6:
#!/bin/vbash
# The list of hosts to ping
PING_HOSTS="www.cloudflare.com www.google.com"
# Pinging hosts, stopping at the first answer
for HOST in $PING_HOSTS; do
logger -t watchdog -p info "Pinging IPv6 $HOST"
/bin/ping6 -c4 $HOST > /dev/null 2>&1
if [ $? -ne 0 ]; then
logger -t watchdog -p warn "Failed pinging IPv6 $HOST"
else
exit 0
fi
done
logger -t watchdog -p err "IPv6 Internet connection is broken"
/usr/sbin/service dibbler-client restart >/dev/null 2>&1
Edit: En fait, c'est toutes les 3 minutes, pas 5:
task-scheduler {
task watchdog {
executable {
path /config/scripts/orange_watchdog.sh
}
interval 3m
}
task watchdog6 {
executable {
path /config/scripts/orange_watchdog6.sh
}
interval 3m
}
}