If else Verschachtelung für Ping-Check in Shell
Hallo,
ich möchte in dieses Script einen doppelten Ping-Check einbauen. Das ganze läuft auf einem DD-WRT Router Aktuell sieht es so aus:
was ich nun auslösen möchte ist folgendes: die Überprüfung mit dem Ping erfolgt einmal. Wenn dieser funktioniert, geht er halt weiter zu "Network is up via $TARGET". Wenn der Ping fehl schlägt, sollen 10 Sekunden gewartet werden und es folgt der zweite Ping-Test. Im Falle von ok geht es wieder zu "Network is up via $TARGET" und alles beginnt von vorne. Falls der zweite Test fehl schlägt soll er das alles unter then mit dem kill-Befehl ausführen. Ich möchte also den Ping-Check doppelt haben. Wie bekomme ich das hin?
Mein eigener Entwurf mit
scheint nicht zu funktionieren. Jedenfalls passiert nach dem ersten fehlgeschlagenen Ping-Test nichts weiter ...
ich möchte in dieses Script einen doppelten Ping-Check einbauen. Das ganze läuft auf einem DD-WRT Router Aktuell sieht es so aus:
#!/bin/sh
INTERVAL=10
PACKETS=1
VPN="openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/openvpncl/route-up.sh --down-pre /tmp/openvpncl/route-down.sh --daemon"
IFACE=tun1
TARGET=192.168.0.1
ME=`basename $0`
RUNNING=`ps | awk '/'"$ME"'/ {++x}; END {print x+0}'`
if [ "$RUNNING" -gt 3 ]; then
echo "Another instance of \"$ME\" is running"
exit 1
fi
while sleep $INTERVAL
do
RET=`ping -c $PACKETS $TARGET 2> /dev/null | awk '/packets received/ {print $4}'`
if [ "$RET" -ne "$PACKETS" ]; then
echo "Ping failed, releasing IP address on $IFACE"
#send a RELEASE signal
kill $(ps | grep "openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/openvpncl/route-up.sh --down-pre /tmp/openvpncl/route-down.sh --daemon" | head -c 5 )
#ensure udhcpc is not running
killall openvpn 2> /dev/null
echo "Renewing IP address: $IFACE"
$VPN
echo "Waiting 10 s..."
sleep 10
else
echo "Network is up via $TARGET"
fi
done
Mein eigener Entwurf mit
#!/bin/sh
INTERVAL=10
PACKETS=1
VPN="openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/openvpncl/route-up.sh --down-pre /tmp/openvpncl/route-down.sh --daemon"
IFACE=tun1
TARGET=192.168.0.1
ME=`basename $0`
RUNNING=`ps | awk '/'"$ME"'/ {++x}; END {print x+0}'`
if [ "$RUNNING" -gt 3 ]; then
echo "Another instance of \"$ME\" is running"
exit 1
fi
while sleep $INTERVAL
do
RET=`ping -c $PACKETS $TARGET 2> /dev/null | awk '/packets received/ {print $4}'`
if [ "$RET" -ne "$PACKETS" ]
then
{
echo "Ping failed, releasing IP address on $IFACE"
sleep 10
}
elif [ "$RET" -ne "$PACKETS" ]
then
{
#send a RELEASE signal
kill $(ps | grep "openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/openvpncl/route-up.sh --down-pre /tmp/openvpncl/route-down.sh --daemon" | head -c 5 )
#ensure udhcpc is not running
killall openvpn 2> /dev/null
echo "Renewing IP address: $IFACE"
$VPN
echo "Waiting 10 s..."
sleep 10
}
else
echo "Network is up via $TARGET"
fi
done
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270362
Url: https://administrator.de/forum/if-else-verschachtelung-fuer-ping-check-in-shell-270362.html
Ausgedruckt am: 20.04.2025 um 18:04 Uhr
1 Kommentar

Moin,
hier siehst du wie sowas geht, ohne den ganzen überflüssigen Kram der Ausgabe von Ping:
http://www.michael-fuchs.net/rubriken/edv/scripts/watchip.html
Mit break kannst du dann bei Bedarf an der gewünschten Stelle aus dem While-Loop springen.
Gruß jodel32
hier siehst du wie sowas geht, ohne den ganzen überflüssigen Kram der Ausgabe von Ping:
http://www.michael-fuchs.net/rubriken/edv/scripts/watchip.html
Mit break kannst du dann bei Bedarf an der gewünschten Stelle aus dem While-Loop springen.
Gruß jodel32