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

Hoe kan ik om de X minuten een ping uitvoeren en de responstijd controleren?

Ik werk momenteel in een groot bedrijf en we hebben ernstige latency-problemen. Dit gebeurt in een proces controle systeem, en is onacceptabel (Openen van een klep duurt soms 2 minuten voordat het commando start)

Ik wil dubbel-checken wanneer het netwerk team zegt “alles is in orde op het netwerk”. Dus wil ik een lus maken die de server pingt en het resultaat in een tekstbestand schrijft.

Ik ben geen batch expert, maar denken jullie dat deze code correct is om te gebruiken?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Antwoorden (10)

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

Ziet er goed uit, maar het is niet nodig om het in een lus te zetten als je continu het IP wilt pingen. Dan zou je het gewoon zo kunnen doen:

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

Als je elke X minuten wilt pingen, gebruik je de lus:

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

Zoals je kunt zien heb ik het sleep commando vervangen door timeout. Dat komt omdat sleep niet altijd beschikbaar is op sommige systemen, terwijl timeout dat meestal wel is.

Ontbreken sleep of timeout commando’s op jouw systeem? Maak je geen zorgen. Vervang gewoon timeout door de volgende hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Deze hack pingt simpelweg je lokale adres, en aangezien het direct zal reageren kunnen we dit gebruiken om een vertraging in de uitvoering te emuleren.

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

Voor een one-liner oplossing gebruik je het volgende:

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. je kunt xxx.xxx.xxx.xxx vervangen door google.com
  2. om het interval aan te passen verander je de 3000 in 60 (voor 1 minuut) of 10(voor 10 seconden)
  3. als je dit commando in een batchbestand (.bat of .cmd) moet zetten, zorg er dan voor dat je % vervangt door %%
1
1
1
2018-10-11 20:56:56 +0000

Voor een Windows oplossing, als je bereid bent om wtee.exe te installeren, zal het volgende werken 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

Proost!

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

de timeout-schakelaar is niet hetzelfde als waar u naar zoekt als een ‘wacht’-schakelaar. De timeout-schakelaar met het Windows ping commando vertelt het commando venster hoe lang te wachten voordat het antwoord ONTVANGT, niet hoe lang te wachten voordat het volgende antwoord wordt verzonden.

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

Voortbordurend op het antwoord van Sparks hierboven, heb ik zijn éénregelige code in een batchbestand gezet met enkele aanpassingen.

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"

opgeslagen als PingD.bat gebruik je het volgende om PingD [machinenaam/IP] [vertraging tussen pings in seconden] uit te voeren

b.v. PingD MyDC01 10 zal elke 10 seconden een ping naar MyDC01 sturen.

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

Als je het gewoon in een opdrachtvenster op Windows wilt plakken…

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

Het pingt elke 3 seconden… totdat je hem stopt

Dit is beter omdat je niet naar een logbestand hoeft te schrijven, (waarom zou je echt een logbestand nodig hebben) alleen naar het onmiddellijke venster en het geeft je de gewenste resultaten “onmiddellijk” :)

Als je om de een of andere reden ook naar een log-bestand kunt pijpen, doe dan het volgende: (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

U kunt de timeout ook aanpassen door de waarde achter 'timeout’ te veranderen zoals het in dit geval 3 seconden is…

En je hoeft niet op te slaan in een batch file… Kopieer en plak gewoon deze tekststring van deze tekst opgeslagen in een opgeslagen cloud locatie… of map met commando’s die je graag gebruikt… enz.

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

Ik weet dat het een Windows vraag is (en een oude ook nog), maar misschien is het vergelijkbaar met Linux en OSX. Dit is het eerste wat naar boven kwam toen ik op zoek was naar een eenvoudig commando om netwerkverkeer op mijn laptop te houden. Misschien handig voor iemand die iets soortgelijks zoekt.

in een bash script:

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

Enkele regel ex ping google dns elke 30sec:

ping -i 30 8.8.8.8 > logfile

Werkt in OSX en Linux, zou echter vrij standaard moeten zijn, weet niet op welk systeem jij zit.

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

De vraag is niet helemaal duidelijk. Blijkbaar heeft het geen zin om een continue lus in een batch file te appen naar een bestand. Vooral als dit batchbestand wordt gestart door een zich herhalende externe gebeurtenis… tenzij je de schijfruimte wilt vullen… of tonnen commando prompts wilt starten en het systeem wilt verstikken…

Mijn veronderstelling is dat er een bepaalde tijd moet zijn om te testen en dat de batch dan moet eindigen. Ik neem ook aan dat vandaag de dag de meeste MS Windows zijn uitgerust met Powershell, wat nuttig zou kunnen zijn voor dit geval. Hier is de twoliner:

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

Dit kan in een batch bestand worden gezet, of als een powershell script worden uitgevoerd, in dit geval verwijder ‘powershell’ en de dubbele aanhalingstekens.

Toch lijkt bash op Windows de beste optie…

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

Op Windows gebaseerde systemen kunnen we het volgende commando gebruiken om een server te pingen na een specifiek interval

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

waarbij -w intervallen in milliseconden specificeert, dus 1000 ~ 1 seconde = 3000 voor 3 seconden vertraging -n specificeert het aantal keren dat ping een query zal sturen naar de server op xxx.xxx.xxx .

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

Dit is het windows commando dat ik gebruik om een specifiek IP te pingen met een gespecificeerd interval (10 seconden in dit voorbeeld):

ping -t <ip.address> -w 10000

-t zegt continu pingen.

-w zegt zo lang wachten voor de volgende ping. Hier is een voorbeeld van 1 minuut wachten:

ping -t <ip.address> -w 60000

Veel plezier, en veel succes!!!