Wenn man über längere Zeit eine IP Verbindung simpel überwachen will, eignet sich Ping sehr gut. Hier die Parameter für eine übersichtliche Ausgabe:
ping -O -D -q <hostname or ip>
Dabei gibt -O
eine Rückmeldung, wenn keine Antwort vor dem nächsten Ping eingangen ist (sonst werden diese ja ignoriert) und -D
stellt jeder Ausgabe den aktuellen Timestamp voran. Dann weiß man auch, wann ein Paket nicht durchgegangen ist. -q
wiederum deaktiviert den restlichen Output.
Das resultiert dann z.B. in:
[1549362144.861791] no answer yet for icmp_seq=75
für jeden erfolglosen Ping.
Damit man das schönes lesen kann, kann man das noch mittels sed leserlicher machen:
ping -O -D -q <hostname or ip> | sed -r 's/\[(1[0-9]{9})(.*)\]/echo $(date -d @\1)":" /e'
und man erhält gut lesbar:
Die Feb 5 11:34:57 CET 2019: no answer yet for icmp_seq=271
Erweitert inklusive Log-Datei
Im Screen starten wir
host="<hostname or ip>"; date > ping-$host.log; ping -O -D -q $host 2>&1 | sed -u -r 's/\[(1[0-9]{9})(.*)\]/echo $(date -d @\1)":" /e' | tee -a ping-$host.log
und in einer zweiten Session rufen wir folgendes auf, um aktuelle infos zu erhalten:
host="<hostname or ip>"; pkill -3 -f ping.*-D.*$host; cat ping-$host.log
Abgesehen von Variablen und einem initialen Input in unser Logfile pipen wir jetzt den STDERR von ping auf STDOUT. Sed verwendet mittels -u
den unbuffered mode und tee schreibt uns den output nicht nur auf die Konsole sondern auch in das Logfile.
Mittels pkill suchen wir dann nach unserem Ping-Prozess. -f
sucht dabei nach dem vollen Kommando (es könnten ja noch andere pings laufen) und -3
schickt ein SIGQUIT
an Ping. Das bewirkt ein Ausgeben der Ping-Statistiken, ohne Ping zu beenden (ist auch mittels CTRL-\
,CTRL-|
oderCTRL-4
auf der Shell des Ping-Prozesses möglich - das beendet aber auch den sed Prozess und damit das gesamte Kommando - wir müssen daher mittels pkill das Signal direkt an ping schicken!).
Am Ende kann man per cat, less oder tail die Log-Datei anzeigen.
- Blog von Peter Schmidt
- 2794 Aufrufe