Como posso executar um ping a cada X minutos e verificar o tempo de resposta?

22

Atualmente, estou trabalhando em uma grande empresa e temos sérios problemas de latência. Isso está acontecendo em um sistema de controle de processo e é inaceitável (abrir uma válvula às vezes leva 2 minutos antes do início do comando)

Quero verificar novamente quando a equipe da rede diz "está tudo certo na rede". Então, eu quero criar um loop que pinga o servidor e grava o resultado em um arquivo de texto.

Eu não sou especialista em lotes, mas você acha que esse código está correto para usar?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
    
por Waza_Be 11.10.2011 / 09:02

8 respostas

27

Parece ótimo para mim, mas não há necessidade de fazer um loop se você quiser fazer o ping contínuo do IP. Então você poderia simplesmente fazer assim:

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

Se você quiser fazer ping a cada minuto X, use o loop:

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

Como você pode ver, substituí o comando sleep por timeout . Isso porque sleep nem sempre está disponível em alguns sistemas, enquanto timeout normalmente é.

Falta de comandos sleep ou timeout no seu sistema? Não se preocupe. Basta substituir timeout pelo seguinte hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Esse hack simplesmente insere seu endereço local e, como ele responde instantaneamente, podemos usar isso para emular um atraso na execução.

    
por 11.10.2011 / 09:14
0

Eu sei que é uma questão do Windows (e antiga), mas talvez seja semelhante ao Linux e ao OSX. Essa é a primeira coisa que surgiu quando eu estava procurando um comando simples para manter o tráfego de rede no meu laptop. Pode ser útil para alguém que procura algo semelhante.

em um script bash:

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

Linha única que faz o download do google dns a cada 30 segundos:

ping -i 30 8.8.8.8 > logfile

Funciona no OSX e no Linux, mas deve ser bem normal, não sei em qual sistema você está.

    
por 18.07.2014 / 09:35
0

Este é o comando do windows que eu uso para pingar um IP específico em um intervalo especificado (10 segundos neste exemplo):

ping -t <ip.address> -w 10000

-t diz ping continuamente.

-w diz espere muito antes do próximo ping. Aqui está um exemplo de espera de 1 minuto:

ping -t <ip.address> -w 60000

Aproveite e boa sorte !!

    
por 23.03.2016 / 14:29
0

o interruptor de tempo limite não é o mesmo que você está procurando como um interruptor de 'espera'. A opção de tempo limite com o comando ping do Windows simplesmente informa à janela de comando quanto tempo esperar antes de RECEBER a resposta, não quanto tempo esperar antes de enviar a resposta NEXT.

    
por 24.06.2016 / 18:08
0

A questão não está bem clara. Aparentemente, não há nenhum uso em loop contínuo em um arquivo em lotes anexando a um arquivo. Especialmente quando este arquivo de lote é iniciado por um evento externo repetitivo ... a menos que você queira preencher o espaço em disco ... ou iniciar toneladas de prompts de comando e afogar o sistema ...

Minha suposição é que deve haver algum período de tempo para testes e, em seguida, o lote deve terminar. Eu também presumo que hoje a maioria dos MS Windows estão equipados com o Powershell, o que pode se tornar útil para este caso. Aqui está o twoliner:

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

Isso pode ser colocado em um arquivo em lotes, ou executado como um script powershell, neste caso, remover 'powershell' e as aspas duplas.

Ainda assim, o bash no Windows parece ser a melhor opção ...

    
por 13.01.2017 / 18:25
0

Para uma solução de uma linha, use o seguinte:

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. você pode substituir xxx.xxx.xxx.xxx por google.com
  2. para editar o intervalo, altere a 3000 para 60 (por 1 minuto) ou 10 (por 10 segundos)
  3. se você precisar colocar esse comando no arquivo de lote (.bat ou .cmd), certifique-se de substituir % por %%
por 08.11.2017 / 07:35
0

Para uma solução do Windows, se estiver disposto a instalar o wtee.exe , o seguinte 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

Felicidades!

    
por 11.10.2018 / 22:56
-1

Em sistemas baseados no Windows, podemos usar o seguinte comando para executar ping em um servidor após um intervalo específico

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

onde -w especifica intervalos em milissegundos, portanto, 1000 ~ 1 segundo = > 3000 por 3 seg. De atraso -n especifica o número de vezes que o ping enviará uma consulta ao servidor em xxx.xxx.xxx.xxx.

    
por 27.04.2015 / 19:57