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

108792
Waza_Be

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 dauert manchmal 2 Minuten, bevor der Befehl startet).

Ich möchte noch einmal nachprüfen, wenn das Netzwerkteam sagt "im Netzwerk ist alles in Ordnung". 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 
22
http://oss.oetiker.ch/smokeping/ Zoredache vor 12 Jahren 0
@Zoredache Ich kann solche Software nicht auf einem Prozesssteuerungscomputer installieren: http://dev.pulsed.net/wp/?p=31 Waza_Be vor 12 Jahren 0
"Win XP Professional" ist kein DOS. grawity vor 12 Jahren 0

8 Antworten auf die Frage

27
mekwall

Es sieht gut aus für mich, aber es ist nicht nötig, es zu wiederholen, wenn Sie die IP ständig pingen wollen. Dann könntest du es einfach so machen:

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

Wenn Sie alle X Minuten ein Ping durchführen möchten, 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, 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? Ärgern Sie sich nicht. Einfach timeoutmit folgendem Hack ersetzen :

@ping 127.0.0.1 -n %INTERVAL% > nul 

Dieser Hack pingt einfach Ihre lokale Adresse an, und da er sofort reagieren wird, können Sie dies verwenden, um eine Ausführungsverzögerung zu emulieren .

Timeout wird nicht als interner oder externer Befehl erkannt Waza_Be vor 12 Jahren 0
@ Profete162, hast du dann den Schlafbefehl? Wenn ja, ersetzen Sie einfach "timeout" durch "sleep". Welche Version von Windows machen Sie das? mekwall vor 12 Jahren 0
Gleiches für den Schlaf ... Ich verwende Win XP Professional Waza_Be vor 12 Jahren 0
@ Profete162, alte Schule! :) Ich füge eine sekundäre Methode hinzu, die Sie verwenden können, wenn diese Befehle fehlen. mekwall vor 12 Jahren 1
0
Robert Heath

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

in einem Bash-Skript:

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

Alle 30 Sekunden einzeiliger Ping-Befehl von Google-DNS:

ping -i 30 8.8.8.8 > logfile 

Funktioniert unter OSX und Linux, sollte jedoch ziemlich standardisiert sein, weiß nicht, auf welchem ​​System Sie sich befinden.

Vielleicht in Cygwin .. Mit Cygwin können Sie Bash in Windows verwenden barlop vor 9 Jahren 1
0
james

Der Timeout-Schalter entspricht nicht dem, was Sie als "Warte" -Schalter suchen. Der Timeout-Schalter mit dem Windows-Befehl ping teilt dem Befehlsfenster lediglich mit, wie lange gewartet werden soll, bevor die Antwort empfangen wird, und nicht, wie lange gewartet wird, bevor die NEXT-Antwort gesendet wird.

Willkommen bei Super User! Dies ist wirklich ein Kommentar und keine Antwort auf die ursprüngliche Frage. Hinterlassen Sie einen Kommentar oder Kommentar zu einem Autor, und hinterlassen Sie einen Kommentar unter dem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie über ausreichend [Ruf] (http://superuser.com/help/whats-reputation) verfügen, werden Sie dies tun [kommentieren Sie jeden Beitrag] (http://superuser.com/help/privileges/comment). Bitte lesen Sie [Warum brauche ich 50 Reputation, um einen Kommentar abzugeben? Was kann ich stattdessen tun?] (Https://meta.stackexchange.com/a/214174) DavidPostill vor 7 Jahren 1
0
dmitry

Die Frage ist nicht ganz klar. In einer Batch-Datei, die an eine Datei angehängt wird, gibt es anscheinend keine Verwendung in der Endlosschleife. Insbesondere, wenn diese Batchdatei durch ein wiederholtes externes Ereignis gestartet wird ... es sei denn, Sie möchten den Speicherplatz auf der Festplatte auffüllen ... oder tonnenweise Eingabeaufforderungen einleiten und das System verschlucken ...

Ich gehe davon aus, dass es einige Zeit zum Testen geben sollte und dann die Charge enden sollte. Ich gehe auch davon aus, dass die meisten MS Windows heute 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 einer Batchdatei abgelegt oder als Powershell-Skript ausgeführt werden. In diesem Fall entfernen Sie 'Powershell' und die Anführungszeichen.

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

0
sparks

Verwenden Sie für eine Einliner-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. Ändern Sie das Intervall 3000in 60(für 1 Minuten) 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%%
0
Sean Vikoren

Wenn Sie bei einer Windows-Lösung wtee.exe installieren möchten, 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!

-1
Praveer Verma

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

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

Dabei gibt -w Intervalle in Millisekunden an, also 1000 ~ 1 Sekunde => 3000 für 3 Sekunden delay -n gibt an, wie oft ping eine Abfrage an den Server unter xxx.xxx.xxx.xxx sendet.

-w gibt nur an, wie lange auf eine Antwort gewartet wird, nicht wie lange auf den Ping gewartet wird. Scott Beeson vor 8 Jahren 14
-1
Software_Programineer

Dies ist der Windows-Befehl, den ich zum Pingen einer bestimmten IP-Adresse in einem bestimmten Intervall (in diesem Beispiel 10 Sekunden) verwenden:

ping -t <ip.address> -w 10000 

-t sagt ununterbrochen Ping.

-w sagt, warten Sie so lange bis zum nächsten Ping. Hier ist ein Beispiel von 1 Minute Wartezeit:

ping -t <ip.address> -w 60000 

Viel Spaß und viel Glück !!

Bei der Frage wurde gefragt, wie die Informationen in eine Datei geschrieben werden sollen. Können Sie Ihre Antwort bearbeiten, um das zu erreichen? Ben N vor 8 Jahren 0
Unter Windows gibt '-w' die maximale Wartezeit an, bevor ein Ping als "verloren" betrachtet wird, nicht die Zeit * zwischen * Pings. wersimmon vor 7 Jahren 15