Сценарий Bash к (более или менее) надежно проверяет, произошел ли Интернет

Мне нужен 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)

Как Вы сделали бы это? Какие хосты Вы проверили бы с помощью ping-запросов?

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

  • По "Интернету произошел", я имею в виду свое интернет-соединение.

  • Я означаю иметь применимое соединение (действительно не имеет значения, говорим ли мы о снижающемся DNS, или соединение действительно действительно медленно [возражают -w для тайм-аута]). Это также, почему я не включал IP, но только размещаю.

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

10
задан Amal Murali 11 June 2014 в 19:50
поделиться

2 ответа

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

5
ответ дан 4 December 2019 в 01:29
поделиться

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

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

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

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

1
ответ дан 4 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

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