Как я могу выполнять пинг каждые 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.
Гравитация

Ответы:


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 вы это делаете?
Мекволл

То же самое для сна ... Я использую Win XP Professional
Waza_Be

1
@ Profete162, старая школа! :) Я добавлю дополнительный метод, который вы можете использовать, когда эти команды отсутствуют.
Мекволл

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"

NB:

  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. Это первое, что пришло мне в голову, когда я искал простую команду для сохранения сетевого трафика на моем ноутбуке. Может быть полезным для тех, кто ищет что-то подобное.

в скрипте bash:

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

Тайм-аут не совпадает с тем, что вы ищете в качестве «ожидания». Переключатель тайм-аута с помощью команды ping Windows просто сообщает командному окну, как долго ждать перед получением ответа, а не сколько ждать перед отправкой СЛЕДУЮЩЕГО ответа.


1
Добро пожаловать в Супер пользователя! Это действительно комментарий, а не ответ на оригинальный вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты . Пожалуйста, прочитайте Почему мне нужно 50 репутации, чтобы комментировать? Что я могу сделать вместо этого?
ДэвидПостилл

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>"

Это можно поместить в пакетный файл или запустить как скрипт powershell, в этом случае удалите «powershell» и двойные кавычки.

Тем не менее, bash на 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

Если вы хотите просто вставить его в командное окно на окнах ...

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

Это пинг каждые 3 секунды ... пока вы не остановите его

Это лучше, потому что вам не нужно записывать в файл журнала (зачем вам действительно нужен файл журнала) только в непосредственное окно, и оно дает вам желаемые результаты "немедленно" :)

Если по какой-либо причине вы также можете выполнить конвейеризацию в файл журнала, выполнив следующее: (для / 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

Кроме того, вы можете настроить тайм-аут, изменив значение после «тайм-аут», как это в этом случае 3 секунды ...

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


На этот вопрос уже есть несколько ответов, пожалуйста, объясните, как ваш ответ лучше / отличается.
Матэ Юхас

-1

В системах на базе Windows мы можем использовать следующую команду для проверки связи с сервером после определенного интервала

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

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


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

-1

Это команда windows, которую я использую для проверки связи с определенным IP-адресом с заданным интервалом (в данном примере 10 секунд):

ping -t <ip.address> -w 10000

-т постоянно говорит пинг.

-W говорит, подождите это задолго до следующего пинга. Вот пример ожидания в 1 минуту:

ping -t <ip.address> -w 60000

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


Был задан вопрос, как записать информацию в файл. Можете ли вы отредактировать свой ответ, чтобы добиться этого?
Бен Н

16
В Windows -wуказывает максимальное время ожидания, прежде чем считать пинг «потерянным», а не время между пингами.
wersimmon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.