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

Wie kann ich alle X Minuten einen Ping durchführen und die Antwortzeit überprüfen?

Ich arbeite derzeit in einem großen Unternehmen und wir haben ernsthafte Latenzprobleme. Dies geschieht in einem Prozesssteuerungssystem und ist inakzeptabel (Das Öffnen eines Ventils dauert manchmal 2 Minuten, bevor der Befehl gestartet wird)

Ich möchte eine doppelte Überprüfung durchführen, wenn das Netzwerkteam sagt, dass “im Netzwerk alles in Ordnung ist”. Also möchte ich eine Schleife erstellen, die den Server anpingt und das Ergebnis in eine Textdatei schreibt.

Ich bin kein Batch-Experte, aber denken Sie, dass dieser Code korrekt ist?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Antworten (10)

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

Sieht für mich gut aus, aber es gibt keinen Grund, eine Schleife zu machen, wenn Sie die IP kontinuierlich pingen wollen. Dann könnten Sie es einfach so machen:

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

Wenn Sie alle X Minuten pingen wollen, verwenden Sie die Schleife:

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

Wie Sie sehen können, habe ich den Befehl sleep durch timeout ersetzt. Das liegt daran, dass sleep auf manchen Systemen nicht immer verfügbar ist, während timeout normalerweise verfügbar ist.

Fehlen die Befehle sleep oder timeout auf Ihrem System? Kein Problem. Ersetzen Sie einfach timeout durch den folgenden Hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Dieser Hack pingt einfach Ihre lokale Adresse an, und da sie sofort antwortet, können wir damit eine Verzögerung der Ausführung emulieren.

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

Für eine Ein-Zeilen-Lösung verwenden Sie Folgendes:

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"

Hinweis:

  1. Sie können xxx.xxx.xxx.xxx durch google.com ersetzen
  2. um das Intervall zu bearbeiten, ändern Sie 3000 in 60 (für 1 Minute) oder 10(für 10 Sekunden)
  3. wenn Sie diesen Befehl in eine Batch-Datei (.bat oder .cmd) einfügen müssen, dann stellen Sie sicher, dass Sie % durch %% ersetzen
1
1
1
2018-10-11 20:56:56 +0000

Für eine Windows-Lösung, wenn Sie bereit sind, wtee.exe zu installieren, funktioniert das Folgende 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

Prost!

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

der Timeout-Schalter ist nicht dasselbe wie das, was Sie als ‘wait’-Schalter suchen. Der Timeout-Schalter mit dem Ping-Befehl von Windows teilt dem Befehlsfenster einfach mit, wie lange es warten soll, bevor es die Antwort EMPFÄNGT, nicht wie lange es warten soll, bevor es die NÄCHSTE Antwort sendet.

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

In Erweiterung der obigen Antwort von Sparks habe ich seinen einzeiligen Code mit einigen Änderungen in eine Batch-Datei eingefügt.

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"

gespeichert als PingD.bat verwenden Sie folgendes, um PingD auszuführen [Rechnername/IP] [Verzögerung zwischen Pings in Sekunden]

z.B. PingD MyDC01 10 sendet alle 10 Sekunden einen Ping an MyDC01.

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

Wenn Sie es einfach in ein Befehlsfenster unter Windows einfügen wollen…

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

Es pingt alle 3 Sekunden… bis Sie es stoppen

Das ist besser, weil Sie nicht in eine Log-Datei schreiben müssen (warum sollten Sie wirklich eine Log-Datei brauchen), nur in das Sofort-Fenster, und es gibt Ihnen die gewünschten Ergebnisse “sofort” :)

Wenn Sie aus irgendeinem Grund auch in die Log-Datei pfeifen können, machen Sie folgendes: (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

Sie können auch die Zeitüberschreitung anpassen, indem Sie den Wert nach ‘timeout’ ändern, wie er in diesem Fall 3 Sekunden beträgt…

Und Sie müssen nicht in einer Batch-Datei speichern… Kopieren Sie einfach diesen Textstring und fügen Sie ihn in einen gespeicherten Cloud-Speicherort ein… oder in einen Ordner mit Befehlen, die Sie verwenden möchten… usw…

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

Ich weiß, es ist eine Windows-Frage (und eine alte noch dazu), aber vielleicht ist es ähnlich für Linux und OSX. Dies ist das erste, was auftauchte, als ich nach einem einfachen Befehl suchte, um den Netzwerkverkehr auf meinem Laptop zu halten. Könnte für jemanden nützlich sein, der nach etwas Ähnlichem sucht.

in einem Bash-Skript:

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

Einzeiliges ex pinging google dns alle 30sec:

ping -i 30 8.8.8.8 > logfile

Funktioniert unter OSX und Linux, sollte aber ziemlich standardmäßig sein, weiß nicht, auf welchem System Sie sind.

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

Die Frage ist nicht ganz klar. Offensichtlich gibt es keinen Nutzen in einer Endlosschleife in einer Batch-Datei, die an eine Datei angehängt wird. Vor allem, wenn diese Batch-Datei durch ein sich wiederholendes externes Ereignis gestartet wird… es sei denn, Sie wollen den Speicherplatz auf der Festplatte auffüllen… oder Unmengen von Befehlsaufforderungen initiieren und das System abwürgen…

Ich nehme an, dass es eine gewisse Zeitspanne zum Testen geben sollte und dann sollte der Batch beendet werden. Ich gehe auch davon aus, dass heute die meisten MS-Windows mit Powershell ausgestattet sind, was für diesen Fall nützlich werden könnte. Hier ist der Twoliner:

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

Dies kann in eine Batch-Datei gesetzt werden, oder als Powershell-Skript ausgeführt werden, in diesem Fall entfernen Sie ‘powershell’ und die Anführungszeichen.

Dennoch scheint die Bash unter Windows die beste Option zu sein…

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

Auf Windows-basierten Systemen können wir den folgenden Befehl verwenden, um einen Server nach einem bestimmten Intervall anzupingen

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

wobei -w die Intervalle in Millisekunden angibt, also 1000 ~ 1 Sekunde => 3000 für 3 Sekunden Verzögerung -n gibt an, wie oft ping eine Anfrage an den Server unter xxx.xxx.xxx.xxx sendet.

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

Dies ist der Windows-Befehl, den ich verwende, um eine bestimmte IP in einem bestimmten Intervall (in diesem Beispiel 10 Sekunden) anzupingen:

ping -t <ip.address> -w 10000

-t sagt ping kontinuierlich.

-w sagt, warte so lange vor dem nächsten Ping. Hier ist ein Beispiel für eine Wartezeit von 1 Minute:

ping -t <ip.address> -w 60000

Viel Spaß und viel Glück!!!