SharePoint Alfresco PHP MySQL
О сайте Контакты
среда, 21 сентября 2011 г.

Как проверить связь с сервером с помощью команды ping в CMD или BAT?

Часто бывает необходимо написать командный файл, который обращается к некоему серверу, скажем, при копировании файлов. При этом скрипт запускается автоматически в фоновом режиме с заданным интервалом времени. Что если в один из запусков сервер не будет доступен (отвалилась сеть, ненадежный канал и прочее)? Тогда скрипт будет безуспешно обращаться к недоступному серверу, пытаясь что-то от него получить. Решением этой проблемы можно считать предварительную проверку сервера на доступность с помощью всем известной программы ping. Но ping не возвращает статуса ошибки, и программа не может узнать, успешно ли установлено соединение с сервером или нет. Ниже приведен код, обходящий этот недостаток.

check_server_is_online.cmd

SET OK=N
FOR /f "Tokens=*" %%a IN ('ping server_name^|FIND "TTL="') DO (
SET OK=Y
)
IF "%OK%" EQU "N" GOTO failure

:success
ECHO server is online

:failure
ECHO server is offline

Здесь server_name - это имя сервера, связь с которым требуется проверить связь. Суть решения в том, чтобы проверить текстовый вывод команды ping на наличие определенных строк. Например, при наличии строки «TTL=» сервер недоступен. Можно, конечно, использовать для проверки другие строки, на вкус пользователя.

Можно зациклить программу с помощью операторов GOTO, чтобы она сама «дождалась», пока сервер будет доступен. При этом логично использовать программу sleep для установки интервала задержки при неуспешном соединении. Для примера, создать такую логику, чтобы программа проверяла наличие связи с сервером каждые 5 минут, и как только соединение установлено, производила какое-то действие.

Естественно, данный метод с проверкой строк можно использовать для любых команд и программ, не только ping.

Sergey Lysenko, среда, 21 сентября 2011 г.

Комментарии: