bash - tipos - ¿Cómo se marca el tiempo cada resultado de ping?
tipos de ping (14)
salida del terminal:
ping -i 5 google.com | xargs -L 1 -I ''{}'' date ''+%Y-%m-%d %H:%M:%S: {}''
salida del archivo:
ping -i 5 google.com | xargs -L 1 -I ''{}'' date ''+%Y-%m-%d %H:%M:%S: {}'' > test.txt
salida de archivo terminal +:
ping -i 5 google.com | xargs -L 1 -I ''{}'' date ''+%Y-%m-%d %H:%M:%S: {}'' | tee test.txt
Fondo de salida de archivo:
nohup ping -i 5 google.com | xargs -L 1 -I ''{}'' date ''+%Y-%m-%d %H:%M:%S: {}'' > test.txt &
Ping devuelve esto por defecto:
64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms
¿Hay alguna forma de conseguirlo para agregar la marca de tiempo?
Por ejemplo,
Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms
Estoy en OS X v10.7 (Lion) que parece tener alguna versión BSD de ping.
De man ping
:
-D Print timestamp (unix time + microseconds as in gettimeofday) before each line.
Producirá algo como esto:
[1337577886.346622] 64 bytes from 4.2.2.2: icmp_req=1 ttl=243 time=47.1 ms
Entonces, la marca de tiempo podría ser analizada a partir de la respuesta de ping
y convertida al formato requerido con la date
.
En OS X puedes simplemente usar la opción --apple-time:
ping -i 2 --apple-time www.apple.com
Produce resultados como:
10:09:55.691216 64 bytes from 72.246.225.209: icmp_seq=0 ttl=60 time=34.388 ms
10:09:57.687282 64 bytes from 72.246.225.209: icmp_seq=1 ttl=60 time=25.319 ms
10:09:59.729998 64 bytes from 72.246.225.209: icmp_seq=2 ttl=60 time=64.097 ms
En macos puedes hacer
ping --apple-time 127.0.0.1
La salida se ve como
16:07:11.315419 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.064 ms
16:07:12.319933 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.157 ms
16:07:13.322766 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
16:07:14.324649 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.148 ms
16:07:15.328743 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.092 ms
Mi envío original fue incorrecto porque no evaluó la fecha de cada línea. Se han hecho correcciones.
Prueba esto
ping google.com | xargs -L 1 -I ''{}'' date ''+%+: {}''
produce la siguiente salida
Thu Aug 15 10:13:59 PDT 2013: PING google.com (74.125.239.103): 56 data bytes
Thu Aug 15 10:13:59 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=0 ttl=55 time=14.983 ms
Thu Aug 15 10:14:00 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=1 ttl=55 time=17.340 ms
Thu Aug 15 10:14:01 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=2 ttl=55 time=15.898 ms
Thu Aug 15 10:14:02 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=3 ttl=55 time=15.720 ms
Thu Aug 15 10:14:03 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=4 ttl=55 time=16.899 ms
Thu Aug 15 10:14:04 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=5 ttl=55 time=16.242 ms
Thu Aug 15 10:14:05 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=6 ttl=55 time=16.574 ms
La opción -L 1 hace que xargs procese una línea a la vez en lugar de palabras.
No especificó ninguna marca de tiempo ni intervalo durante cuánto tiempo requeriría dicha salida, por lo que consideré que era un ciclo infinito. Puede cambiarlo según su necesidad.
while true
do
echo -e "`date`|`ping -n -c 1 <IP_TO_PING>|grep ''bytes from''`"
sleep 2
done
No pude redirigir la solución basada en Perl a un archivo por alguna razón, así que seguí buscando y encontré una forma bash
de hacerlo:
ping www.google.fr | while read pong; do echo "$(date): $pong"; done
Wed Jun 26 13:09:23 CEST 2013: PING www.google.fr (173.194.40.56) 56(84) bytes of data.
Wed Jun 26 13:09:23 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=1 ttl=57 time=7.26 ms
Wed Jun 26 13:09:24 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=2 ttl=57 time=8.14 ms
El crédito va a https://askubuntu.com/a/137246
Prueba esta línea
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
Tendrás que cancelarlo con ctrl-c
tho.
Prueba esto:
ping www.google.com | while read endlooop; do echo "$(date): $endlooop"; done
Devuelve algo como:
Wednesday 18 January 09:29:20 AEDT 2017: PING www.google.com (216.58.199.36) 56(84) bytes of data.
Wednesday 18 January 09:29:20 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=1 ttl=57 time=2.86 ms
Wednesday 18 January 09:29:21 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=2 ttl=57 time=2.64 ms
Wednesday 18 January 09:29:22 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=3 ttl=57 time=2.76 ms
Wednesday 18 January 09:29:23 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=4 ttl=57 time=1.87 ms
Wednesday 18 January 09:29:24 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=5 ttl=57 time=2.45 ms
Puedes crear una función en tu archivo ~/.bashrc
, para que obtengas un comando ping-t
en tu consola:
function ping-t { ping "$1" | while read pong; do echo "$(date): $pong"; done; }
Ahora puede llamar esto en la consola:
ping-t example.com
Sa 31. Mär 12:58:31 CEST 2018: PING example.com (93.184.216.34) 56 (84) bytes de datos.
Sa 31. Mär 12:58:31 CEST 2018: 64 bytes desde 93.184.216.34 (93.184.216.34): icmp_seq = 1 ttl = 48 tiempo = 208 ms
Sa 31. Mär 12:58:32 CEST 2018: 64 bytes desde 93.184.216.34 (93.184.216.34): icmp_seq = 2 ttl = 48 tiempo = 233 ms
Si su AWK no tiene strftime()
:
ping host | perl -nle ''print scalar(localtime), " ", $_''
Para redirigirlo a un archivo, use la redirección de shell estándar y apague el buffer de salida:
ping host | perl -nle ''BEGIN {$|++} print scalar(localtime), " ", $_'' > outputfile
Si quieres el formato ISO8601 para la marca de tiempo:
ping host | perl -nle ''use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_'' > outputfile
También necesito esto para supervisar el problema de red para el problema de tiempo de espera de reflejo de la base de datos. Uso el código de comando de la siguiente manera:
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
Solo necesita modificar Google.com a su nombre de servidor. Funciona perfectamente para mí. y recuerda detener esto cuando termines. El archivo pingtest.txt aumentará en 1 KB por segundo (alrededor).
Gracias por raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/
Transmite el resultado a awk
:
ping host | awk ''{if($0 ~ /bytes from/){print strftime()"|"$0}else print}''
ping -D -n -O -i1 -W1 8.8.8.8
o tal vez
while true; do /
ping -n -w1 -W1 -c1 8.8.8.8 /
| grep -E "rtt|100%" /
| sed -e "s/^/`date` /g"; /
sleep 1; /
done