Er wird erst aktiv und löst eine konfigurierbare Aktion aus, wenn beide Server zum testen komplett nicht mehr antworten.
Bei mir läuft das auf dem Router, um den Status der primären WAN-Verbindung zu überwachen und dann wenn auf 3G umgeschaltet wird ggf. den Freifunk-Hotspot offline zu nehmen.
Das läuft aber auf so ziemlich jedem Linux.
Nach kleinen Anpassungen kann man z. B. auch den Status eines Gerätes überwachen und bei Ausfall eine Aktion auslösen, auch kann die Fehlertoleranz über den Packet Loss Wert im Vergleichswert der Schleife angepasst werden. Dann muss natürlich statt des "=" ein Größenvergleich genutzt werden.
Das berechnet sich aus der Anzahl der angepingten Server, pro server ist maximal ein Packet Loss von 100 % möglich, daher bei 2 Servern im Beispiel 200 %.
Code: Alles auswählen
#!/bin/sh
server1="server1.com" # Ping Server 1
server2="server2.com" # Ping Server 2
interface="eth0" # Interface für den Ping
ping_count=5 # Pinganzahl pro Server
sleep=20 # Pause bis zur naechsten Ausfuehrung (s)
connection_status=1 # Status der Verbindung bei Scriptstart
echo
while true
do
sleep $sleep
echo "Get ping request from server $server1 ..."
ping1=$(ping -I $interface -c$ping_count -q $server1 | grep "packet loss" | cut -d',' -f3 | cut -d'%' -f1)
echo "Get ping request from server $server2 ..."
ping2=$(ping -I $interface -c$ping_count -q $server2 | grep "packet loss" | cut -d',' -f3 | cut -d'%' -f1)
ping=$(expr $ping1 + $ping2)
if [ 200 = $ping ]
then
if [ $connection_status = 1 ]
then
echo "Connection lost ..."
echo "Status: ($ping)"
connection_status=0
# Befehle, die bei Verbindungsverlust ausgefuehrt werden sollen
else
echo "Connection already lost, skipping ..."
echo "Status: ($ping)"
fi
else
if [ $connection_status = 0 ]
then
echo "Connection established ..."
echo "Status: ($ping)"
connection_status=1
# Befehle, die bei Wiederherstellung der Verbindung ausgefuehrt werden sollen
else
echo "Connection already astablished, skipping ..."
echo "Status: ($ping)"
fi
fi
echo
done