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

26

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 disser "está tudo bem na rede". Então, quero criar um loop que faça ping no servidor e grave o resultado em um arquivo de texto.

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

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
Waza_Be
fonte
@ Zoredache Eu não posso instalar tais softwares em um computador de controle de processo: dev.pulsed.net/wp/?p=31
Waza_Be
"win XP Professional" não é DOS.
grawity

Respostas:

31

Parece bom para mim, mas não há necessidade de fazer um loop se você deseja executar ping continuamente no IP. Então você poderia simplesmente fazer assim:

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

Se você deseja executar ping a cada X minuto, 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 sleepcomando por timeout. Isso sleepocorre porque nem sempre está disponível em alguns sistemas, enquanto timeoutnormalmente está.

Faltam sleepou timeoutcomandos no seu sistema? Não se preocupe. Apenas substitua timeoutpelo seguinte corte:

@ping 127.0.0.1 -n %INTERVAL% > nul

Esse hack simplesmente envia um ping para o seu endereço local e, como ele responde instantaneamente, podemos usá-lo para simular um atraso na execução.

mekwall
fonte
timeout não é reconhecido como um comando interno ou externo
Waza_Be
@ Profete162, você tem o comando sleep então? Se sim, basta substituir timeoutpor sleep. Qual versão do Windows você está fazendo isso?
mekwall
O mesmo para o sono ... Estou usando o win XP Professional
Waza_Be 11/11
1
@ Profete162, velha escola! :) Vou adicionar um método secundário que você pode usar quando esses comandos estiverem ausentes.
mekwall
3

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.xxxporgoogle.com
  2. para editar o intervalo, mude 3000para 60(por 1 minuto) ou 10 (por 10 segundos)
  3. se você precisar colocar esse comando no arquivo em lotes (.bat ou .cmd), substitua %por%%
faíscas
fonte
1

Para uma solução do Windows, se você deseja 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!

Sean Vikoren
fonte
0

Eu sei que é uma pergunta do Windows (e antiga), mas talvez seja semelhante ao Linux e OSX. Essa é a primeira coisa que surgiu quando eu estava procurando por um comando simples para manter o tráfego de rede no meu laptop. Pode ser útil para quem 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

Única linha ex ping do Google DNS a cada 30 segundos:

ping -i 30 8.8.8.8 > logfile

Funciona em OSX e Linux, mas deve ser bastante padrão, não sei em que sistema você está.

Robert Heath
fonte
1
talvez em cygwin .. cygwin permite usar o bash no Windows
barlop
0

o interruptor de tempo limite não é o mesmo que você procura 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 SEGUINTE.

James
fonte
1
Bem-vindo ao Super Usuário! Este é realmente um comentário e não uma resposta à pergunta original. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post . Leia Por que preciso de 50 reputação para comentar? O que posso fazer em vez disso?
DavidPostill
0

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

Minha suposição é que deve haver algum período para o teste e o lote deve terminar. Suponho também que hoje a maior parte do MS Windows esteja equipada 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 do PowerShell; nesse caso, remova 'PowerShell' e as aspas duplas.

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

dmitry
fonte
0

expandindo a resposta de Sparks acima, coloquei o código de uma linha dele em um arquivo em lotes 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"

salvo como PingD.bat, use o seguinte para executar o PingD [nome da máquina / IP] [atraso entre pings em segundos]

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

James Tew
fonte
0

Se você quiser apenas colá-lo em uma janela de comando no Windows ...

(para / l% a em () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Resposta de solicitação de destino desconhecido"') do @echo% b e tempo limite 3> NUL)

Ele faz ping a cada 3 segundos ... até você parar

Isso é melhor porque você não precisa gravar em um arquivo de log (por que você realmente precisaria de um arquivo de log) apenas na janela imediata e fornece os resultados desejados "imediatamente" :)

Se, por algum motivo, você também pode canalizar para o arquivo de log, faça o seguinte: (para / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Resposta desconhecida da solicitação de resposta" ') do @echo% b & timeout 3> NUL)> file.txt

Além disso, você pode ajustar o tempo limite alterando o valor após 'tempo limite', pois neste caso são 3 segundos ...

E você não precisa salvar em um arquivo em lotes ... Basta copiar e colar esta sequência de texto deste texto armazenada em um local salvo na nuvem .. ou na pasta de comandos que você deseja usar .. etc.

CA Martin
fonte
Já existem várias respostas para esta pergunta. Explique também como sua resposta é melhor / diferente.
Máté Juhász 30/10
-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, de modo que 1000 ~ 1 segundo => 3000 por 3 segundos de atraso - n especifica o número de vezes que o ping enviará consulta ao servidor em xxx.xxx.xxx.xxx.

Praveer Verma
fonte
15
-w apenas especifica quanto tempo aguardará uma resposta, não quanto tempo aguardará para executar o ping.
Advogado do diabo
-1

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

ping -t <ip.address> -w 10000

-t diz ping continuamente.

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

ping -t <ip.address> -w 60000

Aproveite e boa sorte!

Programador_de_ Software
fonte
A pergunta perguntou como gravar as informações em um arquivo. Você pode editar sua resposta para fazer isso?
23716 Ben N
16
No Windows, -wespecifica o tempo máximo de espera antes de considerar um ping "perdido", não o tempo entre pings.
wersimmon