24

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

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

Я не специалист по пакетной обработке, но считаете ли вы, что этот код подходит для использования?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART

8 ответов8

28

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

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

1

Если вы хотите установить wtee.exe для решения Windows, будет работать следующее (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

Ура!

1

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

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), убедитесь, что вы заменили % на %%
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, но должно быть довольно стандартным, не знаю, на какой системе вы работаете.

0

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

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 кажется лучшим вариантом ...

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

-1

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

ping -t <ip.address> -w 10000

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

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

ping -t <ip.address> -w 60000

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .