Discussion:
Verbindung prüfen
(zu alt für eine Antwort)
Alexander Goetzenstein
2020-12-22 11:13:48 UTC
Permalink
Hallo,
in einem Script möchte ich das Bestehen einer Netzwerkverbindung prüfen,
bevor das Backup-Programm startet. Dazu habe ich mich des folgenden
SERVER="sfo2205"
RETRY=3
COUNT=2
for i in $(seq 1 $RETRY)
do
echo 'Prüfung Nr '$i': ' >> $logfile 2>> $logfile
COUNTSTRING=$(ping -c $COUNT $SERVER | grep 'received')
if [ $(echo $COUNTSTRING | awk -F',' '{ print $2 }' | awk '{ print $1 }') -ne $(echo $COUNTSTRING | awk -F',' '{ print $1 }' | awk '{ print $1 }') ]; then
echo "Host $SERVER ist nicht erreichbar (ping failed) am $(date)" >> $logfile 2>> $logfile
else
echo "Host $SERVER ist erreichbar (ping erfolgreich) am $(date)" >> $logfile 2>> $logfile
# [... Datensicherung vornehmen ...]
fi
done
Bei gefühlt jedem zweiten Update ändert ping jedoch die Ausgabe, und sei
es nur die Sprache ('received' → 'empfangen').

Wie kann ich möglichst einfach damit umgehen?
Oder gibt es geeignetere Methoden?
--
Gruß
Alex
Jan Novak
2020-12-22 11:31:58 UTC
Permalink
Post by Alexander Goetzenstein
Bei gefühlt jedem zweiten Update ändert ping jedoch die Ausgabe, und sei
es nur die Sprache ('received' → 'empfangen').
Wie kann ich möglichst einfach damit umgehen?
Oder gibt es geeignetere Methoden?
Frage den Errorlevel ab.
0 = ping ok, <> 0 ist nicht ok.



Jan
Juergen Ilse
2020-12-22 11:38:50 UTC
Permalink
Hallo,
Post by Alexander Goetzenstein
Hallo,
in einem Script möchte ich das Bestehen einer Netzwerkverbindung prüfen,
bevor das Backup-Programm startet. Dazu habe ich mich des folgenden
SERVER="sfo2205"
RETRY=3
COUNT=2
for i in $(seq 1 $RETRY)
do
echo 'Prüfung Nr '$i': ' >> $logfile 2>> $logfile
COUNTSTRING=$(ping -c $COUNT $SERVER | grep 'received')
if [ $(echo $COUNTSTRING | awk -F',' '{ print $2 }' | awk '{ print $1 }') -ne $(echo $COUNTSTRING | awk -F',' '{ print $1 }' | awk '{ print $1 }') ]; then
echo "Host $SERVER ist nicht erreichbar (ping failed) am $(date)" >> $logfile 2>> $logfile
else
echo "Host $SERVER ist erreichbar (ping erfolgreich) am $(date)" >> $logfile 2>> $logfile
# [... Datensicherung vornehmen ...]
fi
done
Bei gefühlt jedem zweiten Update ändert ping jedoch die Ausgabe, und sei
es nur die Sprache ('received' → 'empfangen').
Warum versuchst du die Ausgabe von ping zu parsen statt den exit Code von
ping direkt zu verwenden?

greenwood% ping -c 1 192.168.22.106
PING 192.168.22.106 (192.168.22.106): 56 data bytes
64 bytes from 192.168.22.106: icmp_seq=0 ttl=64 time=3.479 ms

--- 192.168.22.106 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.479/3.479/3.479/0.000 ms
greenwood% ping -c 1 192.168.22.206
PING 192.168.22.206 (192.168.22.206): 56 data bytes

--- 192.168.22.206 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
greenwood%
greenwood%
greenwood%
greenwood% ping -c 1 192.168.22.106 >/dev/null 2>/dev/null && echo klappt
klappt
greenwood% ping -c 1 192.168.22.206 >/dev/null 2>/dev/null && echo klappt
greenwood%

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
j***@schily.net
2020-12-22 22:32:09 UTC
Permalink
Post by Juergen Ilse
Warum versuchst du die Ausgabe von ping zu parsen statt den exit Code von
ping direkt zu verwenden?
greenwood% ping -c 1 192.168.22.106
PING 192.168.22.106 (192.168.22.106): 56 data bytes
64 bytes from 192.168.22.106: icmp_seq=0 ttl=64 time=3.479 ms
Die Traffic Class Option dafür zu verwenden kommt mir aber nicht besonders
zuverlässig oder portabel vor.
--
EMail:***@schily.net Jörg Schilling D-13353 Berlin
Blog: http://schily.blogspot.com/
URL: http://cdrecord.org/private/ http://sourceforge.net/projects/schilytools/files/
Torsten Berger
2020-12-23 09:04:25 UTC
Permalink
Post by j***@schily.net
Post by Juergen Ilse
greenwood% ping -c 1 192.168.22.106
PING 192.168.22.106 (192.168.22.106): 56 data bytes
64 bytes from 192.168.22.106: icmp_seq=0 ttl=64 time=3.479 ms
Die Traffic Class Option dafür zu verwenden kommt mir aber nicht besonders
zuverlässig oder portabel vor.
meinst Du die (aus man 8 ping)?

-c count
Stop after sending count ECHO_REQUEST packets. With deadline
option, ping waits for count ECHO_REPLY packets, until the timeout
expires.

Bye Torsten.
--
PGP public key:
http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x983B7EA7E3FC9051
j***@schily.net
2020-12-23 16:18:06 UTC
Permalink
Post by Torsten Berger
Post by Juergen Ilse
greenwood% ping -c 1 192.168.22.106
PING 192.168.22.106 (192.168.22.106): 56 data bytes
64 bytes from 192.168.22.106: icmp_seq=0 ttl=64 time=3.479 ms
Die Traffic Class Option dafür zu verwenden kommt mir aber nicht besonders
zuverlässig oder portabel vor.
meinst Du die (aus man 8 ping)?
-c count
Stop after sending count ECHO_REQUEST packets. With deadline
option, ping waits for count ECHO_REPLY packets, until the timeout
expires.
Nö:

http://schillix.sourceforge.net/man/man1m/ping.1m.html

-c traffic_class Specify the traffic class of probe pack-
ets. The value must be an integer in the
range from 0 to 255. Gateways along the
path can route the probe packet dif-
ferently, depending upon the value of
traffic_class set in the probe packet.
This option is valid only on IPv6.
--
EMail:***@schily.net Jörg Schilling D-13353 Berlin
Blog: http://schily.blogspot.com/
URL: http://cdrecord.org/private/ http://sourceforge.net/projects/schilytools/files/
Torsten Berger
2020-12-24 09:24:15 UTC
Permalink
Post by j***@schily.net
http://schillix.sourceforge.net/man/man1m/ping.1m.html
-c traffic_class Specify the traffic class of probe pack-
ets. The value must be an integer in the
range from 0 to 255. Gateways along the
path can route the probe packet dif-
ferently, depending upon the value of
traffic_class set in the probe packet.
This option is valid only on IPv6.
Ahh, danke. So war's gemeint.

Frohe Weihnacht!
--
PGP public key:
http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x983B7EA7E3FC9051
j***@schily.net
2020-12-26 14:35:32 UTC
Permalink
Post by Torsten Berger
Post by j***@schily.net
http://schillix.sourceforge.net/man/man1m/ping.1m.html
-c traffic_class Specify the traffic class of probe pack-
ets. The value must be an integer in the
range from 0 to 255. Gateways along the
path can route the probe packet dif-
ferently, depending upon the value of
traffic_class set in the probe packet.
This option is valid only on IPv6.
Ahh, danke. So war's gemeint.
Ja, ping ist eines der inkompatibelsten Programme, die ich kenne. Es geht zwar
überall auf die gleiche Quelle zurück, aber es hat sich massiv unterschiedlich
weiterentwickelt.
--
EMail:***@schily.net Jörg Schilling D-13353 Berlin
Blog: http://schily.blogspot.com/
URL: http://cdrecord.org/private/ http://sourceforge.net/projects/schilytools/files/
Alexander Goetzenstein
2020-12-23 16:53:57 UTC
Permalink
Hallo,
Post by Juergen Ilse
Warum versuchst du die Ausgabe von ping zu parsen statt den exit Code von
ping direkt zu verwenden?
da musste ich jetzt auch überlegen, aber jetzt weiß ich es wieder: mir
ist nicht gelungen, den Returncode nach Belieben zu verwursten. Die
Auswertung
Post by Juergen Ilse
ping -c $COUNT $SERVER >/dev/null 2>&1
retcode=$?
echo 'Rückgabewert: '$retcode
if [ retcode -eq 0 ]; then
echo -e "Verbindung zu $t: \033[31;1mfehlgeschlagen.\033[m"
else
echo -e "Verbindung zu $t: \033[32;1mOK.\033[m"
fi
bringt zum einen die störende Ausgabe
Post by Juergen Ilse
/usr/local/bin/ia: Zeile 34: [: retcode: Ganzzahliger Ausdruck erwartet.
und zum anderen wird immer etwas ungleich 0 angenommen, unabhängig
davon, ob der Rückgabewert 0 ist oder etwa 1. Funktionieren tut es nur,
wenn ich $? gleich und direkt verwende, doch dann kann ich es andernorts
nicht mehr verwursten.
--
Gruß
Alex
Michael Schütz
2020-12-23 18:08:59 UTC
Permalink
Post by Alexander Goetzenstein
da musste ich jetzt auch überlegen, aber jetzt weiß ich es wieder: mir
ist nicht gelungen, den Returncode nach Belieben zu verwursten. Die
Auswertung
Post by Juergen Ilse
ping -c $COUNT $SERVER >/dev/null 2>&1
retcode=$?
echo 'Rückgabewert: '$retcode
if [ retcode -eq 0 ]; then
echo -e "Verbindung zu $t: \033[31;1mfehlgeschlagen.\033[m"
else
echo -e "Verbindung zu $t: \033[32;1mOK.\033[m"
fi
Probier es doch mal so:

ping -c1 $SERVER > /dev/null 2>&1 && echo "Verbundung OK" || echo
"Verbindung gestört"

Warum so kompliziert?

Schultze
--
Die Vorzüge von gestern sind oft die Fehler von morgen.
Anatole France
Christian Garbs
2020-12-23 18:14:51 UTC
Permalink
Mahlzeit!
Post by Alexander Goetzenstein
da musste ich jetzt auch überlegen, aber jetzt weiß ich es wieder: mir
ist nicht gelungen, den Returncode nach Belieben zu verwursten. Die
Auswertung
Post by Juergen Ilse
ping -c $COUNT $SERVER >/dev/null 2>&1
retcode=$?
echo 'Rückgabewert: '$retcode
if [ retcode -eq 0 ]; then
mit

if [ $retcode -eq 0 ]; then

sollte es gehen. Genau wie beim echo darüber muss die Variable durch
ihren Inhalt ersetzt werden.

Gruß
Chjristian
--
....Christian.Garbs....................................https://www.cgarbs.de
Obey gravity! It's the law!
Alexander Goetzenstein
2020-12-26 09:00:25 UTC
Permalink
Ach ja,
Post by Christian Garbs
Mahlzeit!
Post by Alexander Goetzenstein
da musste ich jetzt auch überlegen, aber jetzt weiß ich es wieder: mir
ist nicht gelungen, den Returncode nach Belieben zu verwursten. Die
Auswertung
Post by Juergen Ilse
ping -c $COUNT $SERVER >/dev/null 2>&1
retcode=$?
echo 'Rückgabewert: '$retcode
if [ retcode -eq 0 ]; then
mit
if [ $retcode -eq 0 ]; then
sollte es gehen. Genau wie beim echo darüber muss die Variable durch
ihren Inhalt ersetzt werden.
ein Tippfehler wieder mal, und hartnäckig übersehen. Danke fürs drauf
stupsen.
--
Gruß
Alex
Tim Landscheidt
2020-12-26 09:23:43 UTC
Permalink
Post by Alexander Goetzenstein
[…]
ein Tippfehler wieder mal, und hartnäckig übersehen. Danke fürs drauf
stupsen.
In diesem Fall wäre auch das anderswo erwähnte ShellCheck
hilfreich gewesen:

| In ./test.sh line 5:
| if [ retcode -eq 0 ]; then
| ^-----^ SC2170: Numerical -eq does not dereference in [..]. Expand or use string operator.
| ^-^ SC2050: This expression is constant. Did you forget the $ on a variable?

Tim
Tim Landscheidt
2020-12-23 18:21:14 UTC
Permalink
Post by Alexander Goetzenstein
Post by Juergen Ilse
Warum versuchst du die Ausgabe von ping zu parsen statt den exit Code von
ping direkt zu verwenden?
da musste ich jetzt auch überlegen, aber jetzt weiß ich es wieder: mir
ist nicht gelungen, den Returncode nach Belieben zu verwursten. Die
Auswertung
Post by Juergen Ilse
ping -c $COUNT $SERVER >/dev/null 2>&1
retcode=$?
echo 'Rückgabewert: '$retcode
if [ retcode -eq 0 ]; then
^^^^^^^
Post by Alexander Goetzenstein
Post by Juergen Ilse
echo -e "Verbindung zu $t: \033[31;1mfehlgeschlagen.\033[m"
else
echo -e "Verbindung zu $t: \033[32;1mOK.\033[m"
fi
bringt zum einen die störende Ausgabe
Post by Juergen Ilse
/usr/local/bin/ia: Zeile 34: [: retcode: Ganzzahliger Ausdruck erwartet.
und zum anderen wird immer etwas ungleich 0 angenommen, unabhängig
davon, ob der Rückgabewert 0 ist oder etwa 1. Funktionieren tut es nur,
wenn ich $? gleich und direkt verwende, doch dann kann ich es andernorts
nicht mehr verwursten.
Da scheint ein "$" zu fehlen ("$retcode"). Ich würde es al-
lerdings, ähnlich wie Michael, als:

| if ping -c "$COUNT" "$SERVER" > /dev/null 2>&1; then
| echo -e "Verbindung zu $t: \033[32;1mOK.\033[m"
| else
| echo -e "Verbindung zu $t: \033[31;1mfehlgeschlagen.\033[m"
| fi

formulieren.

Tim
Lesen Sie weiter auf narkive:
Loading...