Сообщите мне, когда сайт (сервер) снова будет в сети - PullRequest
4 голосов
/ 11 апреля 2010

Когда я проверяю связь с одним сайтом, он возвращает «Время ожидания запроса». Я хочу создать небольшую программу, которая сообщит мне (звуковой сигнал или что-то в этом роде), когда этот сервер снова будет в сети Не важно на каком языке. Я думаю, что это должен быть очень простой скрипт с несколькими строками кода. Так как это написать?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2010

Некоторые реализации ping позволяют указывать условия выхода после получения пакетов:

В Mac OS X используйте ping -a -o $the_host

  • ping будет пытаться (по умолчанию)
  • -a означает сигнал при получении пакета
  • -o означает выход при получении пакета

В Linux (по крайней мере, в Ubuntu) используйте ping -a -c 1 -w inf $the_host

  • -a означает сигнал при получении пакета
  • -c 1 указывает количество пакетов для отправки до выхода (в данном случае 1)
  • -w inf указывает крайний срок, когда пинг завершается независимо от того, что (в данном случае, Бесконечный)
  • когда -c и -w используются вместе, -c становится числом пакетов полученных до выхода

Любой из них может быть прикован цепью для выполнения следующей команды, например подключиться к серверу ssh, как только он включится (с промежутком, позволяющим sshd фактически запускаться):

# ping -a -o $the_host && sleep 3 && ssh $the_host
1 голос
/ 11 апреля 2010

Не забудьте звук уведомления, как эхо "^ G" ! Просто чтобы быть другим - вот пакет Windows:

C:\> more pingnotify.bat
:AGAIN
ping -n 1 %1%
IF ERRORLEVEL 1 GOTO AGAIN
sndrec32 /play /close "C:\Windows\Media\Notify.wav"

C:\> pingnotify.bat localhost

:)

0 голосов
/ 11 апреля 2010

Один из способов - запустить ping - это цикл, например,

while ! ping -c 1 host; do sleep 1; done

(Вы можете перенаправить вывод на /dev/null, если хотите сохранить его в тайне.)

В некоторых системах, таких как Mac OS X, ping может также иметь опции -a -o (согласно другому ответу), которые заставят его продолжать пинговать до получения ответа. Тем не менее, ping во многих (большинстве?) Системах Linux не имеет опции -o, а эквивалент -c 1 -w 0 по-прежнему завершается, если сеть возвращает ошибку.

Редактировать: Если хост не отвечает на команду ping или вам необходимо проверить доступность службы на определенном порту, вы можете использовать netcat в режиме нулевого ввода-вывода:

while ! nc -w 5 -z host port; do sleep 1; done

-w 5 указывает 5-секундный тайм-аут для каждой отдельной попытки. Обратите внимание, что с помощью netcat вы можете даже перечислить несколько портов (или диапазонов портов) для сканирования, когда некоторые из них станут доступными.

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

...