Як я можу виконувати пінг кожні X хвилин і перевіряти час відповіді?


26

Зараз я працюю у великій компанії, і у нас є серйозні проблеми із затримкою. Це відбувається в системі управління процесом, і це неприпустимо (відкривати клапан іноді потрібно 2 хвилини до запуску команди)

Я хочу ще раз перевірити, коли команда мережі каже, що в мережі все гаразд. Отже, я хочу створити цикл, який пінгує сервер і записує результат у текстовий файл.

Я не є експертом з пакетної роботи, але чи вважаєте ви, що цей код правильно використовувати?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART


@Zoredache Я не можу встановити такі програмні засоби на комп'ютер управління процесом: dev.pulsed.net/wp/?p=31
Waza_Be

"win XP Professional" - це не DOS.
grawity

Відповіді:


31

Мені це здається чудово, але немає необхідності в циклі, якщо ви хочете постійно обмінювати IP-адресу. Тоді ви могли просто зробити так:

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

Якщо ви хочете проводити пінг кожну X хвилину, використовуйте цикл:

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

Як ви бачите, я замінив sleepкоманду на timeout. Це тому sleep, що не завжди доступно в деяких системах, тоді як timeoutзазвичай є.

Відсутні sleepабо timeoutкоманди у вашій системі? Не біда. Просто замініть timeoutна наступний злом:

@ping 127.0.0.1 -n %INTERVAL% > nul

Цей злом просто надсилає вашу локальну адресу, і оскільки він відповість миттєво, ми можемо використовувати це, щоб імітувати затримку у виконанні.


тайм-аут не визнається внутрішньою чи зовнішньою командою
Waza_Be

@ Profete162, чи є у вас тоді команда сну? Якщо так, просто замініть timeoutна sleep. У якій версії Windows ви це робите?
mekwall

Те саме для сну ... Я використовую програму win XP Professional
Waza_Be

1
@ Profete162, стара школа! :) Я додам вторинний метод, який ви можете використовувати, коли ці команди відсутні.
mekwall

3

Для однолінійного рішення використовуйте наступне:

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"

Примітка:

  1. ви можете замінити xxx.xxx.xxx.xxxнаgoogle.com
  2. для редагування зміни інтервалу 3000на 60(на 1 хвилину) або 10 (на 10 секунд)
  3. якщо вам потрібно помістити цю команду в пакетний файл (.bat або .cmd), переконайтесь, що ви замінили %на%%

1

Для рішення Windows, якщо ви готові встановити wtee.exe , буде працювати наступне ( 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

Ура!


0

Я знаю, що це питання Windows (і старе в цьому), але, можливо, він схожий на Linux та OSX. Це перше, що з’явилося, коли я шукав просту команду зберегти мережевий трафік на своєму ноутбуці. Може бути корисним тому, хто шукає щось подібне.

у баш-скрипті:

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

Один рядок, коли пінг google dns кожні 30 сек:

ping -i 30 8.8.8.8 > logfile

Працює в OSX та Linux, хоча має бути досить стандартним, не знаю, на якій системі ви працюєте.


1
можливо, у cygwin .. cygwin дозволяє вам використовувати bash у windows
barlop

0

перемикач тайм-аута не є тим, що ви шукаєте, як перемикач "очікування". Перемикач тайм-аута з командою Windows ping просто повідомляє вікні команди, як довго чекати, перш ніж приймати відповідь, а не скільки часу чекати, перш ніж надсилати наступну відповідь.


1
Ласкаво просимо до Супер Користувача! Це справді коментар, а не відповідь на початкове запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх публікацією - ви завжди можете коментувати свої власні публікації, і як тільки у вас буде достатня репутація, ви зможете коментувати будь-яку публікацію . Будь ласка, прочитайте Чому мені потрібно коментувати 50 репутацій? Що я можу зробити замість цього?
DavidPostill

0

Питання не зовсім зрозуміле. Мабуть, немає використання безперервного циклу в пакетному файлі, що додається до файлу. Особливо, коли цей пакетний файл запускається повторюваною зовнішньою подією ... якщо ви не хочете заповнити дисковий простір ... або ініціювати тонни командних підказок і заглушити систему ...

Моє припущення, що має бути певний проміжок часу для тестування, і тоді партія повинна закінчитися. Я також припускаю, що сьогодні більшість MS Windows оснащені Powershell, що може стати в нагоді в цьому випадку. Ось дублер:

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

Це може бути поміщено у пакетний файл або запустити як скрипт powerhell, у цьому випадку видаліть "powershell" та подвійні лапки.

І все-таки баш в Windows, здається, найкращий варіант ...


0

розгорнувши відповідь Спарком вище, я помістив його код одного рядка у пакетний файл з деякими модифікаціями.

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"

збережено як PingD.bat, використовуйте наступне, щоб виконати PingD [ім'я машини / IP] [затримка між пінгами в секундах]

наприклад, PingD MyDC01 10 надсилатиме пінг на MyDC01 кожні 10 секунд.


0

Якщо ви хочете просто вставити його у вікно команд на Windows ...

(for / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Відповісти на запит невідомого пункту призначення"') do @echo% b & час очікування 3> NUL)

Пінг проходить кожні 3 секунди ..., поки ви не зупините його

Це краще, тому що вам не потрібно писати у файл журналу (для чого б вам дійсно потрібен файл журналу) просто в безпосереднє вікно, і це дає "бажані результати" негайно :)

Якщо з якоїсь причини ви також можете передати файл log-файлу, зробивши це: (для / l% a in () зробіть @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Відповісти на запит невідомого пункту призначення" ') do @echo% b & timeout 3> NUL)> file.txt

Крім того, ви можете налаштувати час очікування, змінивши значення після 'timeout', як це в цьому випадку 3 секунди ...

І вам не потрібно зберігати у пакетному файлі ... Просто скопіюйте та вставте цей текстовий рядок із цього тексту, що зберігається у збереженому хмарному місці .. або в папку команд, які ви хочете використовувати .. тощо.


На це питання вже є декілька відповідей, будь ласка, поясніть, як ваша відповідь краща / інша.
Máté Juhász

-1

У системах на базі Windows ми можемо використовувати наступну команду для пінг-сервера після певного інтервалу

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

де -w вказує інтервали в мілісекундах, тому 1000 ~ 1 секунда => 3000 затримки на 3 секунди -n визначає кількість разів, коли пінг буде надсилати запит серверу на xxx.xxx.xxx.xxx.


15
-w просто вказує, скільки часу буде чекати відповіді, а не скільки часу буде чекати пінг.
Адвокат диявола

-1

Це команда Windows, яку я використовую для запингу певного IP через заданий інтервал (10 секунд у цьому прикладі):

ping -t <ip.address> -w 10000

- каже постійно пінг.

-w каже, зачекайте цього задовго до наступного ping. Ось приклад 1 хвилини очікування:

ping -t <ip.address> -w 60000

Насолоджуйтесь, і удачі !!


Питання задавало питання, як записати інформацію у файл. Чи можете ви відредагувати свою відповідь для цього?
Бен N

16
У Windows -wвказується максимальний час очікування, перш ніж розглядати ping "втраченим", а не час між пінгами.
wersimmon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.