Ping gibt dies standardmäßig zurück:
64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms
Gibt es eine Möglichkeit, den Zeitstempel hinzuzufügen?
Zum Beispiel,
Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms
Ich bin auf OS X 10.7 (Lion), das eine BSD- Version von Ping zu haben scheint .
bash
als Shell?stderr
zu ,stdout
bevor das Rohr (|
), etwa so:ping $host 2>&1 | while read pong; do echo "$(date): $pong"; done
. Wenn Sie dies in eine Datei schreiben (oder anhängen) möchten, können Sie den gesamten Befehl (nach Abschluss) umleiten. Wenn Sie keine Subshell erzeugen möchten,date
unterstützt der Befehl dieecho
Eingabe beliebiger Eingaben wie folgt :ping $host 2>&1 | while read pong; do date "+%c: $pong"; done
. Bitte beachten Sie, dass dasformat
Argument vondate
(das mit beginnt+
) nach Belieben angepasst werden kann. Sieheman date
für weitere Informationen.Wenn Ihre AWK nicht hat
strftime()
:ping host | perl -nle 'print scalar(localtime), " ", $_'
Um es in eine Datei umzuleiten, verwenden Sie die Standard-Shell-Umleitung und deaktivieren Sie die Ausgabepufferung:
ping host | perl -nle 'BEGIN {$|++} print scalar(localtime), " ", $_' > outputfile
Wenn Sie das ISO8601-Format für den Zeitstempel wünschen:
ping host | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' > outputfile
quelle
ping
einzige eine erhältSIGPIPE
. Sie können die Prozessersetzung anstelle einer Pipe verwenden:ping host > >(perl -nle 'print scalar(localtime), " ", $_')
und die Strg-C-Taste wechselt zuping
und führt das aus, was Sie möchten. Sie können dasselbe mit derwhile
Schleife tun . Übrigens geht auf meinem System die ZusammenfassungSTDOUT
eher zu alsSTDERR
(also wird sie auch mit einem Zeitstempel versehen).use Time::Piece; print localtime->datetime
(und andere geeignete Einstellungen) mit 5.10 beginnen oder ein CPAN-Modul oder verwendenstrftime
.Von
man ping
:-D Print timestamp (unix time + microseconds as in gettimeofday) before each line.
Es wird so etwas produzieren:
Dann könnte der Zeitstempel aus der
ping
Antwort heraus analysiert und mit in das erforderliche Format konvertiert werdendate
.quelle
Terminalausgang:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}'
Dateiausgabe:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt
Terminal + Dateiausgabe:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' | tee test.txt
Hintergrund der Dateiausgabe:
nohup ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt &
quelle
Unter OS X können Sie einfach die Option --apple-time verwenden:
Erzeugt Ergebnisse wie:
quelle
Meine ursprüngliche Einreichung war falsch, da das Datum nicht für jede Zeile ausgewertet wurde. Korrekturen wurden vorgenommen.
Versuche dies
ping google.com | xargs -L 1 -I '{}' date '+%+: {}'
erzeugt die folgende Ausgabe
Die Option -L 1 bewirkt, dass xargs jeweils eine Zeile anstelle von Wörtern verarbeitet.
quelle
ping -D -n -O -i1 -W1 8.8.8.8
Versuche dies:
ping www.google.com | while read endlooop; do echo "$(date): $endlooop"; done
Es gibt so etwas zurück wie:
quelle
Auf Macos können Sie tun
ping --apple-time 127.0.0.1
Die Ausgabe sieht aus wie
quelle
Leiten Sie das Ergebnis an
awk
:ping host | awk '{if($0 ~ /bytes from/){print strftime()"|"$0}else print}'
quelle
Sie haben keinen Zeitstempel oder kein Intervall angegeben, wie lange Sie eine solche Ausgabe benötigen würden, daher habe ich sie als Endlosschleife betrachtet. Sie können es entsprechend Ihren Anforderungen ändern.
while true do echo -e "`date`|`ping -n -c 1 <IP_TO_PING>|grep 'bytes from'`" sleep 2 done
quelle
grep
Teil auf `egrep '(bytes from|errors)'
oder vielleicht
while true; do \ ping -n -w1 -W1 -c1 8.8.8.8 \ | grep -E "rtt|100%" \ | sed -e "s/^/`date` /g"; \ sleep 1; \ done
quelle
Ich benötige dies auch, um das Netzwerkproblem auf mein Problem mit dem Zeitlimit für die Datenbankspiegelung zu überwachen. Ich benutze den Befehlscode wie folgt:
ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt
Sie müssen nur Google.com an Ihren Servernamen ändern. Es funktioniert perfekt für mich. und denken Sie daran, dies zu beenden, wenn Sie fertig sind. Die Datei pingtest.txt wird um 1 KB pro Sekunde (ungefähr) erhöht.
Vielen Dank für raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/
quelle
Versuchen Sie diese Linie.
while sleep 1;do echo "$(date +%d-%m-%y-%T) $(ping -c 1 whatever.com | gawk 'FNR==2{print "Response from:",$4,$8}')" | tee -a /yourfolder/pingtest.log;done
Sie müssen es mit
ctrl-c
tho stornieren .quelle
tee
, aber das Problem-c 1
ist, die Gesamtstatistik zu verlieren ...Sie können eine Funktion in Ihrer
~/.bashrc
Datei erstellen, sodass Sie einen Ping-Befehlping-t
auf Ihrer Konsole erhalten:function ping-t { ping "$1" | while read pong; do echo "$(date): $pong"; done; }
Jetzt können Sie dies auf der Konsole aufrufen:
quelle