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

26

Actualmente estoy trabajando en una gran empresa y tenemos serios problemas de latencia. Esto está sucediendo en un sistema de control de proceso, y es inaceptable (abrir una válvula a veces toma 2 minutos antes del inicio del comando)

Quiero volver a verificar cuando el equipo de la red dice "todo está bien en la red". Entonces, quiero crear un bucle que haga ping al servidor y escriba el resultado en un archivo de texto.

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

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
Waza_Be
fuente
@Zoredache No puedo instalar dichos softwares en una computadora de control de procesos: dev.pulsed.net/wp/?p=31
Waza_Be
"win XP Professional" no es DOS.
Grawity

Respuestas:

31

A mí me parece bien, pero no hay necesidad de repetirlo si desea hacer ping continuamente a la IP. Entonces simplemente podrías hacerlo así:

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

Si desea hacer ping cada X minutos, use 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 puede ver, reemplacé el sleepcomando con timeout. Eso es porque sleepno siempre está disponible en algunos sistemas, mientras que timeoutgeneralmente lo está.

¿Falta sleepo timeoutcomandos en su sistema? No te preocupes Simplemente reemplácelo timeoutcon el siguiente truco:

@ping 127.0.0.1 -n %INTERVAL% > nul

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

Mekwall
fuente
el tiempo de espera no se reconoce como un comando interno o externo
Waza_Be
@ Profete162, ¿tiene el comando de suspensión? Si es así, simplemente reemplace timeoutcon sleep. ¿Qué versión de Windows estás haciendo esto?
mekwall
Lo mismo para dormir ... Estoy usando win XP Professional
Waza_Be
1
@ Profete162, vieja escuela! :) Agregaré un método secundario que puede usar cuando faltan esos comandos.
mekwall
3

Para una solución de una línea, use 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"

NÓTESE BIEN:

  1. puedes reemplazar xxx.xxx.xxx.xxxcongoogle.com
  2. para editar el intervalo cambie el 3000a 60(por 1 minuto) o 10 (por 10 segundos)
  3. si necesita poner este comando en un archivo por lotes (.bat o .cmd), asegúrese de reemplazarlo %por%%
moscas
fuente
1

Para una solución de Windows, si está 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

¡Aclamaciones!

Sean Vikoren
fuente
0

Sé que es una pregunta de Windows (y una vieja), pero tal vez sea similar a Linux y OSX. Esto es lo primero que surgió cuando estaba buscando un comando simple para mantener el tráfico de red en mi computadora portátil. Puede ser útil para alguien que busca 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

Línea única ex pinging dns de google cada 30 segundos:

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.

Robert Heath
fuente
1
quizás en cygwin .. cygwin te permite usar bash en windows
barlop
0

el interruptor de tiempo de espera no es lo mismo que está buscando 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 esperar antes de RECIBIR la respuesta, no cuánto esperar antes de enviar la respuesta SIGUIENTE.

James
fuente
1
¡Bienvenido a Super User! Esto es realmente un comentario y no una respuesta a la pregunta original. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que tenga suficiente reputación , podrá comentar cualquier publicación . Por favor lea ¿Por qué necesito 50 reputación para comentar? ¿Qué puedo hacer en su lugar?
DavidPostill
0

La pregunta no está del todo clara. Aparentemente no hay uso en bucle continuo en un archivo por lotes que se adjunta a un archivo. Especialmente cuando este archivo por lotes se inicia por un evento externo repetido ... a menos que desee llenar el espacio en disco ... o para iniciar toneladas de mensajes de comando y estrangular el sistema ...

Supongo que debería haber un período de tiempo para las pruebas y luego el lote debería finalizar. También supongo que hoy la mayoría de los MS Windows están equipados con Powershell, lo 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 eliminar 'Powershell' y las comillas dobles.

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

dmitry
fuente
0

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 máquina / IP] [retraso entre pings en segundos]

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

James Tew
fuente
0

Si desea pegarlo en una ventana de comandos en Windows ...

(para / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findtr "Solicitud de respuesta Destino desconocido"') do @echo% b & tiempo de espera 3> NUL)

Hace ping cada 3 segundos ... hasta que lo detengas

Esto es mejor porque no necesita escribir en un archivo de registro, (por qué realmente necesitaría un archivo de registro) solo en la ventana inmediata y le da los resultados deseados "inmediatamente" :)

Si por alguna razón también puede canalizar el archivo de registro haciendo esto: (para / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findtr "Solicitud de respuesta Destino desconocido" ') do @echo% b & timeout 3> NUL)> file.txt

Además, puede ajustar el tiempo de espera cambiando el valor después del 'tiempo de espera', ya que en este caso es de 3 segundos ...

Y no tiene que guardar en un archivo por lotes ... Simplemente copie y pegue esta cadena de texto de este texto almacenado en una ubicación guardada en la nube ... o en la carpeta de comandos que desea usar ... etc.

CA Martin
fuente
Ya hay varias respuestas a esta pregunta, explique también cómo su respuesta es mejor / diferente.
Máté Juhász
-1

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

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

donde -w especifica los intervalos en milisegundos, por lo que 1000 ~ 1 segundo => 3000 por 3 segundos de retraso -n especifica el número de veces que ping enviará una consulta al servidor en xxx.xxx.xxx.xxx.

Praveer Verma
fuente
15
-w solo especifica cuánto tiempo esperará una respuesta, no cuánto tiempo esperará para hacer ping.
Abogado del Diablo
-1

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

ping -t <ip.address> -w 10000

-dice ping continuamente.

-w dice espera tanto tiempo antes del próximo ping. Aquí hay un ejemplo de espera de 1 minuto:

ping -t <ip.address> -w 60000

Disfruta y buena suerte !!

Software_Programineer
fuente
La pregunta preguntaba cómo escribir la información en un archivo. ¿Puedes editar tu respuesta para lograr eso?
Ben N
16
En Windows, -wespecifica el tiempo máximo de espera antes de considerar un ping "perdido", no el tiempo entre pings.
wersimmon