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

Как я могу выполнять пинг каждые X минут и проверять время отклика?

В настоящее время я работаю в большой компании, и у нас серьезные проблемы с задержкой. Это происходит в системе управления технологическим процессом, и это недопустимо (открытие клапана иногда занимает 2 минуты перед запуском команды)

Я хочу перепроверить, когда сетевая команда скажет “все в порядке в сети”. Итак, я хочу создать цикл, который пингнет сервер и запишет результат в текстовый файл.

Я не эксперт по пакетам, но думаете ли вы, что этот код корректен в использовании?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

Ответы (10)

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

Выглядит неплохо, но нет необходимости зацикливать его, если вы хотите непрерывно пинговать 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

Этот хак просто пингирует ваш локальный адрес, и так как он мгновенно ответит, мы можем использовать это для emulate задержки в выполнении.

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

Для однослойного решения используйте следующее:

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
1
1
2018-10-11 20:56:56 +0000

Для решения 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
0
0
2016-06-24 16:08:41 +0000

переключатель таймаута - это не то же самое, что и переключатель “wait” (ждать). Переключатель таймаута с помощью команды Windows ping просто сообщает командному окну, сколько времени нужно ждать до получения ответа, а не сколько нужно ждать до отправки ответа NEXT.

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

Развернув ответ Спарксом выше, я поместил его однострочный код в пакетный файл с некоторыми изменениями.

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
0
0
2019-10-30 02:52:47 +0000

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

(для /l %a в () do @for /f “tokens=*” %b в (‘ping -w 1000 -n 1 8.8.8.8 ^| findstr “Reply Request Unknown Destination”) do @echo %b & timeout 3 >NUL)

It ping’s каждые 3 секунды… пока вы не остановите его

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

Если по какой-то причине вы можете также подключиться к лог-файлу, сделав так: (для /l %a в () сделайте @ для /f “tokens=*” %b в ('ping -w 1000 -n 1 8.8.8. 8 ^| findstr “Reply Request Unknown Destination”) do @echo %b & timeout 3 >NUL)>file.txt

Также можно настроить таймаут, изменив значение после 'таймаута’, как в данном случае 3 секунды…

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

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

Я знаю, что это оконный вопрос (и старый при этом), но, может быть, он похож на 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

Одиночная строка ex pinging google dns каждые 30 секунд:

ping -i 30 8.8.8.8 > logfile

Работает в OSX и Linux, должна быть довольно стандартной, однако, не знает, на какой системе вы находитесь.

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

Вопрос не совсем ясен. Очевидно, что в непрерывном цикле в пакетном файле, добавляемом к файлу, нет смысла. Особенно, когда этот пакетный файл запускается повторяющимся внешним событием… если только вы не хотите заполнить место на диске… или инициировать тонны командных подсказок и задушить систему…

Я предполагаю, что должен быть некоторый период времени для тестирования, а затем пакет должен закончиться. Я также предполагаю, что сегодня большинство 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, в этом случае удалите ‘Powerhell’ и двойные кавычки.

Тем не менее, использование Windows кажется лучшим вариантом…

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

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

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

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

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

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

ping -t <ip.address> -w 10000

-t говорит ping непрерывно.

-w говорит wait this long before next ping. Вот пример 1 минуты ожидания:

ping -t <ip.address> -w 60000

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

Похожие вопросы

3
19
10
28
14