Скрипт Bash для (более или менее) надежной проверки работоспособности Интернета - PullRequest
10 голосов
/ 27 мая 2010

Мне нужен сценарий Bash (или простой оболочки), чтобы вставить cronjob, который каждую минуту проверяет, работает ли Интернет.

Вот как я это сделал:

#! /bin/sh

host1=google.com
host2=wikipedia.org
curr_date=`date +"%Y%m%d%H%M"`

echo -n "${curr_date};"
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) && 
echo "up" || (echo "down" && exit 1)

Как бы вы это сделали? На каких хостах вы бы пинговали?

Разъяснения:

  • Под " Интернет работает ", я имею в виду мое подключение к Интернету.

  • Под " up " я имею в виду наличие пригодного для использования соединения (не имеет значения, говорим ли мы о том, что DNS не работает или соединение действительно очень медленное [учтите -w для таймаута]). Вот почему я не включил ни одного IP-адреса, а только хосты.

Должен ли я также пинговать переполнение стека? Я имею в виду, что если я не могу получить доступ к Google, Википедии или переполнению стека, мне не нужен Интернет: p

Ответы [ 3 ]

5 голосов
/ 27 мая 2010

Это похоже на хорошее решение. Просто добавьте еще несколько хостов и, возможно, несколько чистых IP-хостов, чтобы не полагаться на работу DNS (что само по себе зависит от вашего определения «вверх»).

4 голосов
/ 03 мая 2013

Спасибо за ваш код, он прекрасно работает, на самом деле я оставил только одну строку:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1)
1 голос
/ 27 мая 2010

Какую часть интернет-соединения вы хотите проверить? DHCP? DNS? Физически подключен к разъему? Ядро, распознающее наличие NIC?

Вы можете вручную запросить DNS-серверы вашего интернет-провайдера с помощью команды host(1). Как правило, это хороший показатель того, потерял ли ваш маршрутизатор соединение с Интернет-провайдером.

Вы можете запросить, какие интерфейсы у вашего ядра, используя netstat(8) или ifconfig(8).

Подробную статистику об интерфейсе можно получить, используя ifstat.

...