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

26

Ich arbeite derzeit in einem großen Unternehmen und wir haben ernsthafte Latenzprobleme. Dies geschieht in einem Prozessleitsystem und ist nicht akzeptabel. (Das Öffnen eines Ventils kann bis zu 2 Minuten dauern, bevor der Befehl gestartet wird.)

Ich möchte noch einmal überprüfen, ob das Netzwerkteam sagt, dass im Netz alles in Ordnung ist. Ich möchte also 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 richtig ist?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
Waza_Be
quelle
oss.oetiker.ch/smokeping
Zoredache 11.10.11
@Zoredache Ich kann solche Software nicht auf einem Prozesssteuerungscomputer installieren: dev.pulsed.net/wp/?p=31
Waza_Be
"Win XP Professional" ist nicht DOS.
Grawity

Antworten:

31

Sieht für mich gut aus, muss aber nicht wiederholt werden, wenn Sie die IP-Adresse kontinuierlich anpingen möchten. 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 einen Ping-Befehl senden möchten, verwenden Sie die folgende 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, habe ich den sleepBefehl durch ersetzt timeout. Das liegt daran, dass sleepes auf manchen Systemen nicht immer verfügbar ist, während dies timeoutnormalerweise der Fall ist.

Fehlende sleepoder timeoutBefehle auf Ihrem System? Ärgere dich nicht. Ersetzen Sie einfach timeoutmit dem folgenden Hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Dieser Hack pingt einfach Ihre lokale Adresse an und da er sofort reagiert, können wir dies verwenden, um eine Verzögerung bei der Ausführung zu emulieren .

Mekwall
quelle
Zeitüberschreitung wird nicht als interner oder externer Befehl
erkannt
@ Profete162, hast du dann den sleep befehl? Wenn ja, ersetzen Sie einfach timeoutmit sleep. Welche Windows-Version machst du das?
Zwischenmahlzeit
Das gleiche gilt für den Schlaf ... Ich verwende Win XP Professional
Waza_Be
1
@ Profete162, alte Schule! :) Ich werde eine sekundäre Methode hinzufügen, die Sie verwenden können, wenn diese Befehle fehlen.
mekwall
3

Verwenden Sie für eine Ein-Liner-Lösung 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"

NB:

  1. Sie können ersetzen xxx.xxx.xxx.xxxmitgoogle.com
  2. Um das Intervall zu bearbeiten, ändern Sie die Einstellung 3000auf 60(für 1 Minute) oder 10 (für 10 Sekunden).
  3. wenn Sie diesen Befehl in Batch - Datei setzen müssen (.bat oder .cmd), dann stellen Sie sicher , dass Sie ersetzen %mit%%
Funken
quelle
1

Wenn Sie bereit sind, wtee.exe für eine Windows-Lösung zu installieren, funktioniert Folgendes ( 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!

Sean Vikoren
quelle
0

Ich weiß, es ist eine Windows-Frage (und eine alte dazu), aber vielleicht ähnelt sie Linux und OSX. Dies war das erste Mal, dass 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

Einzelne Zeile, die alle 30 Sekunden Google DNS ausgibt:

ping -i 30 8.8.8.8 > logfile

Funktioniert unter OSX und Linux, sollte aber ziemlich normal sein, weiß nicht, auf welchem ​​System du bist.

Robert Heath
quelle
1
Vielleicht in Cygwin .. Cygwin können Sie bash in Windows verwenden
Barlop
0

Der Timeout-Schalter stimmt nicht mit dem überein, was Sie als Warte-Schalter suchen. Der Timeout-Schalter mit dem Windows-Ping-Befehl teilt dem Befehlsfenster einfach mit, wie lange gewartet werden muss, bevor die Antwort empfangen wird, und nicht, wie lange gewartet werden muss, bis die nächste Antwort gesendet wird.

James
quelle
1
Willkommen bei Super User! Dies ist wirklich ein Kommentar und keine Antwort auf die ursprüngliche Frage. Wenn Sie einen Autor kritisieren oder um Klärung bitten möchten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Wenn Sie über eine ausreichende Reputation verfügen, können Sie jeden Beitrag kommentieren . Bitte lesen Sie Warum brauche ich 50 Ruf, um einen Kommentar abzugeben? Was kann ich stattdessen tun?
DavidPostill
0

Die Frage ist nicht ganz klar. Offensichtlich gibt es keine Verwendung in Endlosschleifen in einer Batchdatei, die an eine Datei angehängt wird. Insbesondere, wenn diese Batch-Datei durch ein sich wiederholendes externes Ereignis gestartet wird ... es sei denn, Sie möchten den Speicherplatz auf der Festplatte ausfüllen ... oder tonnenweise Eingabeaufforderungen auslösen und das System drosseln ...

Ich gehe davon aus, dass es eine gewisse Zeit zum Testen geben sollte und die Charge dann enden sollte. Ich gehe auch davon aus, dass heute die meisten MS Windows mit Powershell ausgestattet sind, was für diesen Fall nützlich sein 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 geschrieben oder als Powershell-Skript ausgeführt werden. Entfernen Sie in diesem Fall 'Powershell' und die doppelten Anführungszeichen.

Trotzdem scheint Bash auf Windows die beste Option zu sein ...

dmitry
quelle
0

Um die Antwort von Sparks weiter oben zu erweitern, 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"

Als PingD.bat gespeichert. Verwenden Sie Folgendes, um PingD [Computername / IP] [Verzögerung zwischen Pings in Sekunden] auszuführen.

zB PingD MyDC01 10 sendet alle 10 Sekunden einen Ping an MyDC01.

James Tew
quelle
0

Wenn Sie es einfach in ein Befehlsfenster unter Windows einfügen möchten ...

(für / l% a in () @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Unbekanntes Ziel anfordern"') do @echo% b & Timeout 3> NUL)

Es pingt alle 3 Sekunden ... bis Sie aufhören

Dies ist besser, weil Sie nicht in eine Protokolldatei schreiben müssen (warum würden Sie wirklich eine Protokolldatei benötigen), sondern nur in das unmittelbare Fenster und es gibt Ihnen die gewünschten Ergebnisse "sofort" :)

Wenn Sie aus irgendeinem Grund auch eine Pipe-Funktion für die Protokolldatei ausführen können: (für / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Unbekanntes Ziel anfordern" ') @echo% b & timeout 3> NUL)> file.txt ausführen

Sie können das Zeitlimit auch anpassen, indem Sie den Wert nach "Zeitlimit" ändern, da dies in diesem Fall 3 Sekunden sind ...

Und Sie müssen nicht in einer Batch-Datei speichern ... Kopieren Sie einfach diese Textzeichenfolge aus diesem Text, der an einem gespeicherten Cloud-Speicherort gespeichert ist, oder einem Ordner mit Befehlen, die Sie verwenden möchten.

CA Martin
quelle
Es gibt bereits mehrere Antworten auf diese Frage. Bitte erläutern Sie auch, wie Ihre Antwort besser / anders ist.
Máté Juhász
-1

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

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

Wobei -w Intervalle in Millisekunden angibt, sodass 1000 ~ 1 Sekunde => 3000 für 3 Sekunden Verzögerung. -n angibt, wie oft Ping-Anfragen an den Server unter xxx.xxx.xxx.xxx gesendet werden.

Praveer Verma
quelle
15
-w gibt nur an, wie lange auf eine Antwort gewartet wird und nicht, wie lange auf einen Ping-Befehl gewartet wird.
Devil's Advocate
-1

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

ping -t <ip.address> -w 10000

-t sagt ununterbrochen ping.

-w sagt, warte so lange, bevor du das nächste Mal pingst. Hier ist ein Beispiel für eine Wartezeit von 1 Minute:

ping -t <ip.address> -w 60000

Viel Spaß und viel Glück !!

Software_Programineer
quelle
Bei der Frage wurde gefragt, wie die Informationen in eine Datei geschrieben werden sollen. Können Sie Ihre Antwort bearbeiten, um dies zu erreichen?
Ben N
16
Gibt unter Windows -wdie maximale Wartezeit an, bevor ein Ping als "verloren" eingestuft wird, nicht die Zeit zwischen Pings.
Wersimmon