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

Jak mogę wykonać ping co X minut i sprawdzić czas odpowiedzi?

Obecnie pracuję w dużej firmie i mamy poważne problemy z opóźnieniami. Dzieje się to w systemie sterowania procesem i jest nie do zaakceptowania (Otwarcie zaworu czasami zajmuje 2 minuty przed rozpoczęciem polecenia)

Chcę podwójnie sprawdzić, kiedy zespół sieciowy mówi “wszystko jest w porządku w sieci”. Chcę więc stworzyć pętlę, która pinguje serwer i zapisuje wynik w pliku tekstowym.

Nie jestem ekspertem od wsadów, ale czy myślisz, że ten kod jest poprawny do użycia?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Odpowiedzi (10)

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

Wygląda dobrze dla mnie, ale nie ma potrzeby zapętlać go, jeśli chcesz stale pingować IP. Wtedy możesz po prostu zrobić to w ten sposób:

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

Jeśli chcesz pingować co X minut, użyj pętli:

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

Jak widzisz zastąpiłem komendę sleep komendą timeout. To dlatego, że sleep nie zawsze jest dostępne w niektórych systemach, podczas gdy timeout zazwyczaj jest.

Brakuje Ci komend sleep lub timeout w Twoim systemie? Nie martw się. Po prostu zastąp timeout następującym hackiem:

@ping 127.0.0.1 -n %INTERVAL% > nul

Ten hack po prostu pinguje twój lokalny adres, a ponieważ odpowie on natychmiast, możemy użyć tego do emulowania opóźnienia w wykonaniu.

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

Dla rozwiązania typu one-liner użyj następującego:

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"

Uwaga:

  1. możesz zastąpić xxx.xxx.xxx.xxx przez google.com
  2. aby edytować interwał zmień 3000 na 60 (dla 1 minuty) lub 10(dla 10 sekund)
  3. jeśli musisz umieścić to polecenie w pliku wsadowym (.bat lub .cmd), to upewnij się, że zastąpisz % przez %%.
1
1
1
2018-10-11 20:56:56 +0000

W przypadku rozwiązania dla Windows, jeśli jesteś skłonny zainstalować wtee.exe , następujące rozwiązanie będzie działać 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

Na zdrowie!

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

przełącznik timeout nie jest tym samym, czego szukasz jako przełącznik ‘wait’. Przełącznik timeout w poleceniu Windows ping po prostu mówi oknu poleceń, jak długo czekać przed OTRZYMANIEM odpowiedzi, a nie jak długo czekać przed wysłaniem NASTĘPNEJ odpowiedzi.

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

Opierając się na odpowiedzi Sparksa powyżej, umieściłem jego jednolinijkowy kod w pliku wsadowym z pewnymi modyfikacjami.

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"

zapisany jako PingD.bat użyj następującego do wykonania PingD [nazwa maszyny/IP] [opóźnienie między pingami w sekundach]

np. PingD MyDC01 10 będzie wysyłał ping do MyDC01 co 10 sekund.

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

Jeśli chcesz po prostu wkleić go do okna poleceń w systemie Windows…

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

To pinguje co 3 sekundy… dopóki go nie zatrzymasz

Jest to lepsze rozwiązanie, ponieważ nie musisz zapisywać do pliku dziennika (dlaczego tak naprawdę potrzebujesz pliku dziennika) tylko do natychmiastowego okna i daje ci pożądane wyniki “natychmiast” :)

Jeśli z jakiegoś powodu możesz również wykonać pipe out do pliku dziennika, robiąc to: (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

Można też dostosować timeout zmieniając wartość po ‘timeout’, tak jak w tym przypadku jest to 3 sekundy…

I nie musisz zapisywać do pliku wsadowego… Wystarczy skopiować i wkleić ten ciąg tekstowy z tego tekstu przechowywanego w zapisanej lokalizacji w chmurze… lub folderu poleceń, które lubisz używać… itp.

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

Wiem, że to pytanie dotyczące systemu Windows (i stare w tym czasie), ale może jest podobne do Linuksa i OSX. Jest to pierwsza rzecz, która pojawiła się, gdy szukałem prostego polecenia, aby utrzymać ruch sieciowy na moim laptopie. Może być przydatny dla kogoś, kto szuka czegoś podobnego.

w skrypcie bash:

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

Jednolinijkowy ex pingujący google dns co 30sec:

ping -i 30 8.8.8.8 > logfile

Działa w OSX i Linux, powinien być jednak dość standardowy, nie wiem na jakim systemie jesteś.

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

Pytanie nie jest całkiem jasne. Najwyraźniej nie ma sensu ciągła pętla w pliku wsadowym dołączającym do pliku. Zwłaszcza gdy ten plik wsadowy jest uruchamiany przez powtarzające się zdarzenie zewnętrzne… chyba, że chcemy zapełnić przestrzeń dyskową… albo zainicjować mnóstwo komend i zadławić system…

Moim założeniem jest, że powinien być jakiś okres czasu na testowanie, a następnie partia powinna się zakończyć. Zakładam też, że obecnie większość systemów MS Windows jest wyposażona w Powershell, który może się przydać w tym przypadku. Oto twoliner:

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

Można to umieścić w pliku wsadowym, lub uruchomić jako skrypt powershell, w tym przypadku usunąć ‘powershell’ i cudzysłów.

Mimo to, bash na Windowsie wydaje się być najlepszą opcją…

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

W systemach Windows możemy użyć następującego polecenia, aby pingować serwer po określonym odstępie czasu

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

gdzie -w określa odstępy czasu w milisekundach, więc 1000 ~ 1 sekunda = = 3000 dla 3 sekund opóźnienia -n określa ilość razy ping będzie wysyłał zapytanie do serwera pod adresem xxx.xxx.xxx.xxx.xxx .

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

To jest polecenie windowsowe, którego używam do pingowania określonego IP w określonym odstępie czasu (w tym przykładzie 10 sekund):

ping -t <ip.address> -w 10000

-t mówi pinguj ciągle.

-w mówi, że należy odczekać tyle czasu przed następnym pingiem. Oto przykład 1 minuty oczekiwania:

ping -t <ip.address> -w 60000

Miłej zabawy i powodzenia!!!