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

26

Obecnie pracuję w dużej firmie i mamy poważne problemy z opóźnieniami. Dzieje się tak w systemie sterowania procesem i jest niedopuszczalne (czasami otwieranie zaworu zajmuje 2 minuty przed uruchomieniem polecenia)

Chcę dokładnie sprawdzić, kiedy zespół sieci mówi „wszystko w sieci jest w porządku”. Chcę utworzyć pętlę, która wysyła ping do serwera i zapisuje wynik w pliku tekstowym.

Nie jestem ekspertem wsadowym, ale czy uważasz, że ten kod jest poprawny w użyciu?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
Waza_Be
źródło
@Zoredache Nie mogę zainstalować takiego oprogramowania na komputerze sterującym procesem: dev.pulsed.net/wp/?p=31
Waza_Be
„Win XP Professional” to nie DOS.
grawity

Odpowiedzi:

31

Dla mnie wygląda dobrze, ale nie ma potrzeby zapętlania go, jeśli chcesz ciągle pingować adres IP. Następnie 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 widać zastąpiłem sleeppolecenie timeout. Jest tak, ponieważ sleepnie zawsze jest dostępne w niektórych systemach, podczas gdy timeoutzwykle jest.

Brakuje sleeplub timeoutkomendy w twoim systemie? Nie martw się. Po prostu zamień timeoutna następujący hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

Ten hack po prostu wysyła ping do twojego lokalnego adresu, a ponieważ zareaguje natychmiast, możemy to wykorzystać do emulacji opóźnienia w wykonaniu.

mekwall
źródło
limit czasu nie jest rozpoznawany jako polecenie wewnętrzne ani zewnętrzne
Waza_Be
@ Profete162, czy masz wtedy polecenie uśpienia? Jeśli tak, to po prostu wymienić timeoutsię sleep. W jakiej wersji systemu Windows to robisz?
mekwall
To samo dotyczy snu ... Używam Win XP Professional
Waza_Be
1
@ Profete162, stara szkoła! :) Dodam drugą metodę, której możesz użyć, gdy brakuje tych poleceń.
mekwall
3

W przypadku rozwiązania jednowarstwowego użyj:

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. można zastąpić xxx.xxx.xxx.xxxzgoogle.com
  2. W celu edycji przedział Zmiana 3000do 60(na 1 minutę) lub 10 (10 sekund)
  3. jeśli musisz umieścić to polecenie w pliku wsadowym (.bat lub .cmd), upewnij się, że zastąpiłeś %je%%
iskry
źródło
1

W przypadku systemu Windows, jeśli chcesz zainstalować wtee.exe , będą działać następujące polecenia ( 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

Twoje zdrowie!

Sean Vikoren
źródło
0

Wiem, że to pytanie Windows (i to stare), ale może jest podobne do Linuksa i OSX. 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

Pojedyncza linia ex ping ping google dns co 30 sekund:

ping -i 30 8.8.8.8 > logfile

Działa w OSX i Linux, choć powinien być dość standardowy, nie wiem na jakim systemie się używasz.

Robert Heath
źródło
1
moze w cygwin .. cygwin pozwala ci korzystac z basha w
Windowsie
0

przełącznik limitu czasu nie jest tym samym, co szukasz jako przełącznika „oczekiwania”. Przełącznik limitu czasu z poleceniem ping systemu Windows po prostu informuje okno poleceń, jak długo należy czekać przed OTRZYMANIEM odpowiedzi, a nie jak długo czekać przed wysłaniem NEXT.

James
źródło
1
Witamy w Super User! To jest naprawdę komentarz, a nie odpowiedź na pierwotne pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem - zawsze możesz komentować własne posty, a gdy będziesz mieć odpowiednią reputację , będziesz mógł komentować każdy post . Proszę przeczytać Dlaczego potrzebuję 50 reputacji, aby móc komentować? Co mogę zamiast tego zrobić?
DavidPostill
0

Pytanie nie jest do końca jasne. Najwyraźniej nie ma zastosowania w ciągłej pętli w pliku wsadowym dołączanym do pliku. Zwłaszcza gdy ten plik wsadowy jest uruchamiany przez powtarzające się zdarzenie zewnętrzne ... chyba że chcesz zapełnić miejsce na dysku ... lub zainicjować masę poleceń i dusić system ...

Zakładam, że powinien upłynąć trochę czasu na testowanie, a następnie partia powinna się zakończyć. Zakładam również, że dziś większość 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 usuń „PowerShell” i podwójne cudzysłowy.

Mimo to bash w systemie Windows wydaje się najlepszą opcją ...

dmitry
źródło
0

rozwijając odpowiedź Sparks powyżej, umieściłem jego jeden wiersz kodu 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"

zapisane jako PingD.bat użyj następującego polecenia, aby wykonać PingD [nazwa komputera / IP] [opóźnienie między pingami w sekundach]

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

James Tew
źródło
0

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

(for / l% a in () do @for / f "tokeny = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Żądanie odpowiedzi Nieznane miejsce docelowe"') do @echo% b i limit czasu 3> NUL)

Pinguje co 3 sekundy ... dopóki go nie zatrzymasz

Jest to lepsze, ponieważ nie musisz zapisywać do pliku dziennika (dlaczego tak naprawdę potrzebujesz pliku dziennika) tylko do bezpośredniego okna i daje on pożądane wyniki „natychmiast” :)

Jeśli z jakiegoś powodu możesz również wyrzucić do pliku dziennika, wykonując następujące czynności: (for / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8,8 ^ | findstr „Żądanie odpowiedzi Nieznane miejsce docelowe” ') do @echo% b & timeout 3> NUL)> file.txt

Możesz także dostosować limit czasu, zmieniając wartość po limicie czasu, tak jak w tym przypadku 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 w folderze poleceń, których chcesz użyć ... itd.

CA Martin
źródło
Istnieje już kilka odpowiedzi na to pytanie, wyjaśnij również, w jaki sposób Twoja odpowiedź jest lepsza / inna.
Máté Juhász
-1

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

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

gdzie -w określa interwały w milisekundach, więc 1000 ~ 1 sekunda => 3000 dla 3-sekundowego opóźnienia -n określa, ile razy ping będzie wysyłał zapytanie do serwera o xxx.xxx.xxx.xxx.

Praveer Verma
źródło
15
-w określa tylko czas oczekiwania na odpowiedź, a nie czas oczekiwania na ping.
Adwokat diabła,
-1

Oto polecenie systemu Windows, którego używam do pingowania określonego adresu IP w określonych odstępach czasu (w tym przykładzie 10 sekund):

ping -t <ip.address> -w 10000

-t mówi ciągle ping.

-w mówi, że poczekaj tak długo przed następnym pingiem. Oto przykład 1 minuty oczekiwania:

ping -t <ip.address> -w 60000

Życzymy powodzenia !!

Software_Programineer
źródło
Pytanie dotyczyło sposobu zapisania informacji w pliku. Czy możesz edytować swoją odpowiedź, aby to osiągnąć?
Ben N
16
W systemie Windows -wokreśla maksymalny czas oczekiwania przed uznaniem ping za „utracony”, a nie czas między pingami.
wersimmon