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

Come posso eseguire un ping ogni X minuti e controllare il tempo di risposta?

Attualmente sto lavorando in una grande azienda e abbiamo seri problemi di latenza. Questo accade in un sistema di controllo di processo, ed è inaccettabile (Aprire una valvola a volte richiede 2 minuti prima dell'avvio del comando)

Voglio ricontrollare quando il team di rete dice “tutto è a posto sulla rete”. Quindi, voglio creare un ciclo che pinga il server e scriva il risultato in un file di testo.

Non sono un esperto di batch, ma pensate che questo codice sia corretto da usare?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Risposte (10)

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

A me sembra che vada bene, ma non c'è bisogno di fare il loop se vuoi pingare continuamente l'IP. Allora potresti semplicemente fare così:

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

Se vuoi fare il ping ogni X minuti, usa il loop:

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

Come puoi vedere ho sostituito il comando sleep con timeout. Questo perché sleep non è sempre disponibile su alcuni sistemi, mentre timeout di solito lo è.

Mancano i comandi sleep o timeout sul tuo sistema? Non preoccupatevi. Basta sostituire timeout con il seguente hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Questo hack ping semplicemente il vostro indirizzo locale, e dato che risponderà istantaneamente possiamo usarlo per emulare un ritardo nell'esecuzione.

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

Per una soluzione one-liner usa il seguente:

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. puoi sostituire xxx.xxx.xxx.xxx con google.com
  2. per modificare l'intervallo cambia 3000 con 60 (per 1 minuto) o 10(per 10 secondi)
  3. se devi mettere questo comando in un file batch (.bat o .cmd), allora assicurati di sostituire % con %%
1
1
1
2018-10-11 20:56:56 +0000

Per una soluzione Windows, se sei disposto a installare wtee.exe , il seguente funzionerà 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

Salute!

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

l'interruttore di timeout non è lo stesso di quello che state cercando come interruttore di ‘attesa’. L'interruttore di timeout con il comando ping di Windows dice semplicemente alla finestra di comando quanto tempo aspettare prima di RICEVERE la risposta, non quanto tempo aspettare prima di inviare la risposta successiva.

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

espandendo la risposta di Sparks qui sopra, ho messo il suo codice di una linea in un file batch con alcune modifiche.

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"

salvato come PingD.bat usa il seguente per eseguire PingD [nome macchina/IP] [ritardo tra i ping in secondi]

ad esempio PingD MyDC01 10 invierà un ping a MyDC01 ogni 10 secondi.

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

Se volete semplicemente incollarlo in una finestra di comando su 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)

Fa il ping ogni 3 secondi… finché non lo fermi

Questo è meglio perché non hai bisogno di scrivere in un file di log, (perché avresti davvero bisogno di un file di log) solo nella finestra immediata e ti dà i risultati desiderati “immediatamente” :)

Se per qualche ragione potete anche fare un pipe su un file di log facendo così: (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

Inoltre, puoi regolare il timeout cambiando il valore dopo ‘timeout’ come è in questo caso 3 secondi…

E non è necessario salvare in un file batch… Basta copiare e incollare questa stringa di testo da questo testo memorizzato in una posizione cloud salvata.. o cartella di comandi che ti piace usare.. ecc.

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

So che è una domanda su Windows (e una vecchia), ma forse è simile a Linux e OSX. Questa è la prima cosa che è venuta fuori quando stavo cercando un semplice comando per mantenere il traffico di rete sul mio portatile. Potrebbe essere utile a qualcuno che cerca qualcosa di simile.

in uno script bash:

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

Single line ex ping google dns ogni 30sec:

ping -i 30 8.8.8.8 > logfile

Funziona in OSX e Linux, dovrebbe essere abbastanza standard però, non so su quale sistema sei.

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

La domanda non è molto chiara. Apparentemente non c'è alcuna utilità in un ciclo continuo in un file batch che si aggiunge a un file. Soprattutto quando questo file batch è avviato da un evento esterno che si ripete… a meno che non si voglia riempire lo spazio su disco… o avviare tonnellate di prompt di comandi e soffocare il sistema…

La mia supposizione è che ci dovrebbe essere un certo periodo di tempo per i test e poi il batch dovrebbe finire. Presumo anche che oggi la maggior parte dei MS Windows sono dotati di Powershell, che potrebbe diventare utile per questo caso. Ecco il twoliner:

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

Questo può essere messo in un file batch, o eseguito come uno script powershell, in questo caso togliete ‘powershell’ e i doppi apici.

Ancora, bash su Windows sembra essere l'opzione migliore…

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

Sui sistemi basati su Windows possiamo usare il seguente comando per eseguire il ping di un server dopo un intervallo specifico

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

dove -w specifica gli intervalli in millisecondi quindi 1000 ~ 1 secondo => 3000 per 3 secondi di ritardo -n specifica il numero di volte che il ping invierà la query al server a xxx.xxx.xxx.xxx .

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

Questo è il comando di windows che uso per eseguire il ping di un IP specifico ad un intervallo specificato (10 secondi in questo esempio):

ping -t <ip.address> -w 10000

-t dice di eseguire il ping continuamente.

-w dice di aspettare questo tempo prima del prossimo ping. Ecco un esempio di attesa di 1 minuto:

ping -t <ip.address> -w 60000

Enjoy, and Good Luck!