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

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

Estou actualmente a trabalhar numa grande empresa e temos sérios problemas de latência. Isto está a acontecer num sistema de controlo de processos, e é inaceitável (Abrir uma válvula por vezes demora 2 minutos antes do início do comando)

Quero verificar novamente quando a equipa da rede diz “tudo está bem na rede”. Assim, quero criar um laço que pinta o servidor e escreve o resultado num ficheiro de texto.

Não sou especialista em lotes, mas acha que este código é correcto de usar?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Respostas (10)

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

A mim parece-me bem, mas não há necessidade de o fazer em loop, se se quiser fazer um loop contínuo do IP. Então poderia simplesmente fazê-lo desta forma:

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

Se quiser pingar cada X minutos, use o laço:

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

Como pode ver, substituí o comando sleep por timeout. Isto porque o sleep nem sempre está disponível em alguns sistemas, ao passo que o timeout normalmente está.

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

@ping 127.0.0.1 -n %INTERVAL% > nul

Este hack simplesmente pinta o seu endereço local, e uma vez que responderá instantaneamente podemos usar isto para emular um atraso na execução.

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

Para uma solução de uma linha, utilizar 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. pode substituir xxx.xxx.xxx.xxx por google.com
  2. para editar o intervalo mude o 3000 para 60 (durante 1 minuto) ou 10(durante 10 segundos)
  3. se precisar de colocar este comando em ficheiro batch (.bat ou .cmd), então certifique-se de que substitui % por %%
1
1
1
2018-10-11 20:56:56 +0000

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

Saúde!

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

o interruptor de tempo limite não é o mesmo que o que se procura como interruptor de ‘esperar’. O interruptor de tempo limite com o comando ping do Windows diz simplesmente à janela de comando quanto tempo deve esperar antes de RECEBER a resposta, não quanto tempo deve esperar antes de enviar a NEXT resposta.

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

expandindo sobre a resposta da Sparks acima, coloquei o seu código de uma linha num ficheiro de lote com algumas modificações.

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 o seguinte para executar PingD [nome da máquina/IP] [atraso entre pings em segundos]

por exemplo, PingD MyDC01 10 enviará um ping para MyDC01 a cada 10 segundos.

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

Se quiser apenas colá-lo numa janela de comando em janelas…

(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)

É ping a cada 3 segundos… até o parar

Isto é melhor porque não precisa de escrever para um ficheiro de registo, (porque precisaria realmente de um ficheiro de registo) apenas para a janela imediata e dá-lhe os resultados desejados “imediatamente” :)

Se, por alguma razão, também puder canalizar para ficheiro de registo fazendo isto: (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)>file.txt

Também, pode ajustar o timeout alterando o valor após ‘timeout’ como é neste caso 3 segundos…

E não tem de guardar num ficheiro de lote… Basta copiar e colar esta cadeia de texto a partir deste texto armazenado numa localização de nuvem guardada… ou pasta de comandos que gosta de utilizar… etc…

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

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

num 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 ex pingogle dns cada 30sec:

ping -i 30 8.8.8.8 > logfile

Funciona em OSX e Linux, deve ser bastante standard, no entanto, não sei em que sistema está.

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

A questão não é muito clara. Aparentemente, não há qualquer utilização em loop contínuo num ficheiro de lote anexado a um ficheiro. Especialmente quando este ficheiro de lote é iniciado por um evento externo repetitivo… a menos que se queira preencher o espaço em disco… ou iniciar toneladas de avisos de comando e estrangular o sistema…

A minha suposição é que deve haver algum período de tempo para testes e depois o lote deve terminar. Assumo também que hoje em dia a maioria dos MS Windows estão equipados com Powershell, o que pode tornar-se ú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>"

Isto pode ser colocado num ficheiro de lote, ou correr como um script powerhell, neste caso remover ‘powerhell’ e as aspas duplas.

Ainda assim, bash on Windows parece ser a melhor opção…

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

Em sistemas baseados em Windows podemos usar o seguinte comando para pingar 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 milisegundos, portanto 1000 ~ 1 segundo => 3000 por 3 segundos de atraso -n especifica número de vezes que o ping enviará a consulta para o servidor em xxx.xxx.xxx.xxx .

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

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

ping -t <ip.address> -w 10000

-t diz ping continuamente.

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

ping -t <ip.address> -w 60000

Desfrute, e Boa Sorte!!