2011-10-11 07:02:21 +0000 2011-10-11 07:02:21 +0000
26
26
Advertisement

¿Cómo puedo realizar un ping cada X minutos y comprobar el tiempo de respuesta?

Advertisement

Actualmente estoy trabajando en una gran empresa y tenemos graves problemas de latencia. Esto ocurre en un sistema de control de procesos, y es inaceptable (Abrir una válvula a veces tarda 2 minutos antes de iniciar el comando)

Quiero volver a comprobar cuando el equipo de red dice “todo está bien en la red”. Para ello, quiero crear un bucle que haga un ping al servidor y escriba el resultado en un archivo de texto.

No soy un experto en lotes, pero ¿crees que es correcto utilizar este código?

@ECHO OFF

:LOOPSTART

time /T
ping xxx.xx.x.x -t >> filename.txt
sleep -m 3000

GOTO LOOPSTART
Advertisement

Respuestas (10)

32
32
32
2011-10-11 07:14:25 +0000

A mí me parece bien, pero no es necesario hacer un bucle si quieres hacer un ping continuo a la IP. Entonces podrías simplemente hacerlo así:

@ECHO OFF
set IPADDRESS=x.x.x.x
ping %IPADDRESS% -t >> filename.txt

Si quieres hacer ping cada X minutos, usa el bucle:

@ECHO OFF
set IPADDRESS=x.x.x.x
set INTERVAL=60
:PINGINTERVAL
ping %IPADDRESS% -n 1 >> filename.txt
timeout %INTERVAL%
GOTO PINGINTERVAL

Como puedes ver he sustituido el comando sleep por timeout. Esto se debe a que sleep no siempre está disponible en algunos sistemas, mientras que timeout suele estarlo.

¿No tienes los comandos sleep o timeout en tu sistema? No te preocupes. Simplemente sustituye timeout por el siguiente truco:

@ping 127.0.0.1 -n %INTERVAL% > nul

Este hack simplemente hace un ping a su dirección local, y como responderá instantáneamente podemos usar esto para emular un retraso en la ejecución.

3
3
3
2017-11-08 06:35:32 +0000

Para una solución de una sola línea utilice lo siguiente:

cmd /v /c "(for /l %a in () do @for /f "tokens=*" %b in ('ping -w 1000 -n 1 xxx.xxx.xxx.xxx ^| findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %b & timeout 3000 >NUL) > pingtestresults.txt"

NB:

  1. puede sustituir xxx.xxx.xxx.xxx por google.com
  2. para editar el intervalo cambie el 3000 por 60 (para 1 minuto) o 10(para 10 segundos)
  3. si necesita poner este comando en un archivo por lotes (.bat o .cmd), entonces asegúrese de sustituir % por %%
1
Advertisement
1
1
2018-10-11 20:56:56 +0000

Para una solución en Windows, si estás dispuesto a instalar wtee.exe , lo siguiente funcionará pingloop.bat ):

@echo off
SETLOCAL

set pingTarget=yahoo.com
set fileName=pinglog.txt
set waitSeconds=420

echo. | wtee -a %fileName%
echo ====================================================== | wtee -a %fileName%
echo Starting Ping Loop; Logging to %fileName% | wtee -a %fileName%

:timestamp
set day=%date:~7,2%
set month=%date:~4,2%
set year=%date:~10,4%

set timestamp=%year%-%month%-%day%_%time%
echo. | wtee -a %fileName%
echo ------------------------------------------------------ | wtee -a %fileName%
echo Ping Timestamp: %timestamp% | wtee -a %fileName%

:ping
ping %pingTarget% -n 1 | wtee -a %fileName%

:wait
ping 127.0.0.1 -n %waitSeconds% > nul

goto timestamp

ENDLOCAL

¡Salud!

0
0
0
2016-06-24 16:08:41 +0000

el interruptor de tiempo de espera no es lo mismo que lo que buscas como interruptor de “espera”. El interruptor de tiempo de espera con el comando ping de Windows simplemente le dice a la ventana de comandos cuánto tiempo debe esperar antes de RECIBIR la respuesta, no cuánto tiempo debe esperar antes de enviar la siguiente respuesta.

0
Advertisement
0
0
2019-03-08 10:08:28 +0000

ampliando la respuesta de Sparks arriba, puse su código de una línea en un archivo por lotes con algunas modificaciones.

cmd /v /c "(for /l %%a in () do @for /f "tokens=*" %%b in ('ping -w 1000 -n 1 %1 ^| 
findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %%b & timeout %2 
>NUL) > pingtestresults.txt"

guardado como PingD.bat use lo siguiente para ejecutar PingD [nombre de la máquina/IP] [retraso entre pings en segundos]

por ejemplo PingD MyDC01 10 enviará un ping a MyDC01 cada 10 segundos.

0
0
0
2019-10-30 02:52:47 +0000

Si quieres simplemente pegarlo en una ventana de comandos en windows…

(for /l %a in () do @for /f “tokens=*” %b in (‘ping -w 1000 -n 1 8.8.8.8 ^| findstr “Reply Request Unknown Destination”’) do @echo %b & timeout 3 >NUL)

Hace ping cada 3 segundos… hasta que lo detengas

Esto es mejor porque no necesitas escribir en un archivo de registro, (por qué necesitarías realmente un archivo de registro) sólo en la ventana inmediata y te da los resultados deseados “inmediatamente” :)

Si por alguna razón también se puede canalizar a un archivo de registro haciendo esto: (para /l %a en () hacer @for /f “tokens=*” %b en (‘ping -w 1000 -n 1 8.8.8. 8 ^| findstr “Reply Request Unknown Destination”’) do @echo %b & timeout 3 >NUL)>file.txt

Además, puedes ajustar el tiempo de espera cambiando el valor después de ‘timeout’ como es en este caso 3 segundos…

Y no tienes que guardar en un archivo por lotes… Sólo tienes que copiar y pegar esta cadena de texto de este texto almacenado en una ubicación de la nube guardado .. o carpeta de comandos que te gusta usar .. etc.

0
Advertisement
0
0
2014-07-18 07:35:10 +0000

Sé que es una pregunta de windows (y antigua), pero quizás sea similar a Linux y OSX. Esto es lo primero que me salió cuando buscaba un comando sencillo para mantener el tráfico de red en mi portátil. Puede ser útil para alguien que busque algo similar.

en un script bash:

WAITSECONDS=30 #or whatever your needs are
IPTOPING=8.8.8.8 #or whatever your needs are
ping -i ${WAITSECONDS} ${IPTOPING} > logfile

Una sola línea de ping a google dns cada 30seg:

ping -i 30 8.8.8.8 > logfile

Funciona en OSX y Linux, aunque debería ser bastante estándar, no sé en qué sistema estás.

0
0
0
2017-01-13 17:25:07 +0000

La pregunta no está muy clara. Aparentemente no tiene sentido un bucle continuo en un archivo por lotes que se anexa a un archivo. Especialmente cuando este archivo por lotes es iniciado por un evento externo que se repite… a menos que quieras llenar el espacio del disco… o iniciar toneladas de solicitudes de comandos y ahogar el sistema…

Mi suposición es que debe haber algún período de tiempo para probar y luego el lote debe terminar. También asumo que hoy en día la mayoría de los MS Windows están equipados con Powershell, que podría ser útil para este caso. Aquí está el twoliner:

powershell "get-date | out-file <log filename>"
powershell "test-connection <IP> -delay <interval> -count <how many pings> | out-file -append <log filename>"

Esto se puede poner en un archivo por lotes, o ejecutar como un script de Powershell, en este caso quitar ‘powershell’ y las comillas dobles.

Aún así, bash en Windows parece ser la mejor opción…

-1
Advertisement
-1
-1
2015-04-27 17:57:18 +0000

En los sistemas basados en Windows podemos utilizar el siguiente comando para hacer ping a un servidor después de un intervalo específico

ping xxx.xxx.xxx -w xxxx -n xx >> c:\logfile.txt

donde -w especifica los intervalos en milisegundos así que 1000 ~ 1 segundo => 3000 para un retraso de 3 segundos -n especifica el número de veces que el ping enviará la consulta al servidor en xxx.xxx.xxx.xxx .

-1
-1
-1
2016-03-23 13:29:44 +0000

Este es el comando de Windows que uso para hacer ping a una IP específica en un intervalo especificado (10 segundos en este ejemplo):

ping -t <ip.address> -w 10000

-t dice ping continuamente.

-w dice que hay que esperar este tiempo antes del siguiente ping. Aquí hay un ejemplo de 1 minuto de espera:

ping -t <ip.address> -w 60000

¡Disfruta, y buena suerte!

Advertisement
Advertisement