Мне нужен 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
Это кажется хорошим решением. Просто добавьте еще несколько хостов и, возможно, несколько хостов с чистым IP, чтобы вы не полагались на работу DNS (которая сама по себе зависит от вашего определения «up»).
Какую часть подключения к Интернету вы хотите проверить? DHCP? DNS? Физически подключен к разъему? Ядро распознает наличие сетевого адаптера?
Вы можете вручную запросить DNS-серверы вашего интернет-провайдера с помощью команды host (1)
. Обычно это хороший показатель того, потерял ли ваш маршрутизатор соединение с интернет-провайдером.
Вы можете узнать, какие интерфейсы есть у вашего ядра, используя netstat (8)
или ifconfig (8)
.
Вы можете получить подробную статистику об интерфейсе, используя ifstat
.