1 votos

Necesito un comando de Terminal para hacer ping cada segundo, pausar y luego repetir

Quiero encontrar un comando de Terminal que proporcione un ping con marca de tiempo cada segundo durante un período de tiempo (digamos 5 minutos) y luego haga una pausa durante otro período de tiempo (digamos 30 minutos) y luego repita ese proceso hasta que lo detenga. Tendré que dejarlo funcionar durante días.

En otras palabras, lo que quiero es una especie de combinación de los 2 siguientes:

1) ping 8.8.8.8 | while read line; do echo `date` - $line; done
2) ping 8.8.8.8 | while read line; do echo `date` - $line; sleep 1800; done

(1) proporciona un listado de pings cada segundo con una marca de tiempo, mientras que (2) hace lo mismo pero cada 30 minutos en lugar de cada segundo. Puedo usar (1) pero genera muchos más datos de los que necesito. (2) proporciona las pausas que necesito pero no puede capturar los eventos que estoy buscando (que duran unos 4 segundos, ver más abajo).

Aunque no es necesario para responder a mi pregunta, la razón por la que quiero esto es para hacer frente a un problema de conectividad a Internet intermitente. Usando (1) he descubierto que la mayor parte del tiempo mi conexión a internet va bien, pero cada dos días más o menos hay periodos (que duran horas) durante los cuales recibo pings inusualmente altos durante unos 4 segundos, y esto se repite cada 15 segundos más o menos. Pero el uso de (1) para averiguar que significaba un montón de recopilación de datos innecesarios. Además, tengo un script separado que trazará los datos y hay demasiados puntos de datos para trazar convenientemente ya que necesito recoger durante días.

Estoy ejecutando OS 13.2 en un MacAir M1

3voto

while :; do
    ping --apple-time -c $((5*60)) 8.8.8.8
    sleep $((30*60))
    echo # if required to separate the blocks
done

--apple-time obviamente es una adición de Apple que es bastante útil para lo que usted necesita aquí, la salida se vería así

15:50:24.467213 64 bytes from 8.8.8.8: icmp_seq=0 ttl=114 time=2.991 ms
15:50:25.471150 64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=1.805 ms
15:50:26.476259 64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=1.822 ms
15:50:27.480521 64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=1.832 ms
15:50:28.485576 64 bytes from 8.8.8.8: icmp_seq=4 ttl=114 time=1.785 ms

Si sólo desea la marca de tiempo y el tiempo de ping, puede utilizar sed para filtrar el ruido:

$ ping --apple-time -c $((5*60)) 8.8.8.8 | sed -n -E 's/(.*) 64 bytes.*time=(.*) ms/\1 \2/p'
19:11:49.447810 2.928
19:11:50.450692 1.836
19:11:51.455125 1.829

Para lograr lo mismo sin depender de las opciones específicas de Apple, también puede simplemente tomar su segundo comando y poner la opción sleep fuera del while read line bucle:

while :; do
    ping -c $((5*60)) 8.8.8.8 | while read line; do echo $(date): "$line"; done
    sleep $((30*60))
    echo # if required to separate the blocks
done

o, de nuevo sin el ruido

while :; do
    ping -c $((5*60)) 8.8.8.8 | while read line; do 
        echo $(date): $(sed -n -E 's/.*time=(.*) ms/\1/p' <<<$line)
    done
    sleep $((30*60))
    echo # if required to separate the blocks
done

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X