Come posso eseguire un ping ogni X minuti e controllare i tempi di risposta?


26

Attualmente sto lavorando in una grande azienda e abbiamo seri problemi di latenza. Ciò sta accadendo in un sistema di controllo del processo ed è inaccettabile (a volte aprire una valvola impiega 2 minuti prima dell'avvio del comando)

Voglio ricontrollare quando il team di rete dice "tutto va bene sulla rete". Quindi, voglio creare un ciclo che esegue il ping del server e scrive il risultato in un file di testo.

Non sono un esperto di batch, ma pensi 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


@Zoredache Non riesco a installare tali software su un computer di controllo di processo: dev.pulsed.net/wp/?p=31
Waza_Be

"Win XP Professional" non è DOS.
Grawity

Risposte:


31

Mi sembra perfetto, ma non è necessario eseguirne il loop se si desidera eseguire il ping continuo dell'IP. Quindi potresti semplicemente farlo in questo modo:

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

Se vuoi eseguire 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 sleepcomando con timeout. Questo perché sleepnon è sempre disponibile su alcuni sistemi mentre di timeoutsolito lo è.

Mancano sleepo timeoutcomandi sul tuo sistema? Non preoccuparti. Sostituisci semplicemente timeoutcon il seguente hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Questo hack limita semplicemente il tuo indirizzo locale e poiché risponderà istantaneamente possiamo usarlo per emulare un ritardo nell'esecuzione.


il timeout non viene riconosciuto come comando interno o esterno
Waza_Be

@ Profete162, hai il comando sleep allora? In tal caso, basta sostituire timeoutcon sleep. Quale versione di Windows stai facendo questo?
Mekwall,

Lo stesso
vale

1
@ Profete162, vecchia scuola! :) Aggiungerò un metodo secondario che puoi usare quando mancano quei comandi.
Mekwall,

3

Per una soluzione da 1 linea utilizzare quanto segue:

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 sostituirlo xxx.xxx.xxx.xxxcongoogle.com
  2. per modificare l'intervallo, cambiare 3000in 60(per 1 minuto) o 10 (per 10 secondi)
  3. se è necessario inserire questo comando nel file batch (.bat o .cmd), assicurarsi di sostituirlo %con%%

1

Per una soluzione Windows, se si desidera installare wtee.exe , funzionerà quanto segue ( 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

Saluti!


0

So che è una domanda di Windows (e una vecchia), ma forse è simile a Linux e OSX. Questa è la prima cosa che è emersa quando stavo cercando un semplice comando per mantenere il traffico di rete sul mio laptop. 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

Esecuzione di una singola riga di ping di Google DNS ogni 30 secondi:

ping -i 30 8.8.8.8 > logfile

Funziona in OSX e Linux, tuttavia dovrebbe essere piuttosto standard, non so su quale sistema ti trovi.


1
forse in cygwin .. cygwin ti permette di usare bash in windows
barlop

0

l'interruttore di timeout non è lo stesso di quello che stai cercando come interruttore di "attesa". L'interruttore di timeout con il comando ping di Windows indica semplicemente alla finestra di comando quanto attendere prima di RICEVERE la risposta, non quanto attendere prima di inviare la risposta SUCCESSIVA.


1
Benvenuto in Super User! Questo è davvero un commento e non una risposta alla domanda originale. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e una volta che avrai una reputazione sufficiente sarai in grado di commentare qualsiasi post . Si prega di leggere Perché ho bisogno di 50 reputazione per commentare? Cosa posso fare invece?
DavidPostill

0

La domanda non è del tutto chiara. Apparentemente non è possibile utilizzare un ciclo continuo in un file batch in aggiunta a un file. Soprattutto quando questo file batch viene avviato da un evento esterno ripetuto ... a meno che non si desideri riempire lo spazio su disco ... o avviare tonnellate di prompt dei comandi e soffocare il sistema ...

La mia ipotesi è che ci dovrebbe essere un periodo di tempo per il test e quindi il batch dovrebbe terminare. Suppongo anche che oggi la maggior parte degli MS Windows sia dotata di Powershell, che potrebbe essere utile in 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 inserito in un file batch o eseguito come script PowerShell, in questo caso rimuovere 'PowerShell' e le doppie virgolette.

Tuttavia, bash su Windows sembra essere l'opzione migliore ...


0

espandendo la risposta di Sparks sopra, ho inserito il suo codice di una riga 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 utilizzare quanto segue per eseguire PingD [nome macchina / IP] [ritardo tra ping in secondi]

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


0

Se vuoi semplicemente incollarlo in una finestra di comando su Windows ...

(per / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Rispondi a destinazione sconosciuta"') do @echo% b e timeout 3> NUL)

Fa il ping ogni 3 secondi ... fino a quando non lo fermi

Questo è meglio perché non hai bisogno di scrivere in un file di registro, (perché dovresti davvero avere bisogno di un file di registro) solo nella finestra immediata e ti dà i risultati desiderati "immediatamente" :)

Se per qualche motivo è anche possibile eseguire il pipe out nel file di registro in questo modo: (per / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Rispondi a destinazione sconosciuta" ') do @echo% b & timeout 3> NUL)> file.txt

Inoltre, è possibile regolare il timeout modificando 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.


Esistono già diverse risposte a questa domanda, spiega anche come la tua risposta è migliore / diversa.
Máté Juhász,

-1

Su sistemi basati su Windows possiamo usare il comando seguente 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 in cui ping invierà la query al server su xxx.xxx.xxx.xxx.


15
-w specifica solo per quanto tempo attenderà una risposta, non per quanto tempo attenderà il ping.
Devil's Advocate,

-1

Questo è il comando di Windows che utilizzo per eseguire il ping di un IP specifico a un intervallo specificato (10 secondi in questo esempio):

ping -t <ip.address> -w 10000

-t dice ping continuamente.

-w dice aspetta molto prima del prossimo ping. Ecco un esempio di 1 minuto di attesa:

ping -t <ip.address> -w 60000

Buon divertimento e buona fortuna !!


La domanda chiedeva come scrivere le informazioni in un file. Puoi modificare la tua risposta per riuscirci?
Ben N

16
Su Windows, -wspecifica il tempo massimo di attesa prima di considerare un ping "perso", non il tempo tra i ping.
Wersimmon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.