По просьбе начальства был написан небольшой скрипт для проверки и записи в лог состояния доступности интернета, чтобы посредством лога разрывов и соединений, дать возможность начальству официально наехать на провайдера. :lol:

Так как начальство интересовали сами факты отсутствия инета по вине прова, поэтому в логах просто указывается дата, время и констатация факта наличия или отсутствие связи.

Наличие инета определяется просто — регулярным пингом сайта с минимальной вероятностью выпадения из сети, т.е. google.com. Можно использовать любой другой сайт, не имеющий в имени слов ‘unknown’, ‘expired’, ‘unreachable’, ‘time out’ (по ним определяется наличие ошибок при пинге), но лучше оставить гугл.

В порядке автоматизации было бы неплохо поставить скрипт в автозагрузку и регулярно почитывать лог в /var/log/inet.log. Если планируется поглядывать в лог из браузера, то лучше заменить русский текст сообщений на буржуйский — не будет проблем с кодировкой.

Остальное в комментариях скрипта.

#!/bin/bash
# http://www.cetlot.com
#
# Скрипт в бесконечном цикле пингует удалённый хост в инете с интервалом 60 сек
# при первой удачной или неудачной попытке пинга пишется соответствующее сообщение в лог
# следующая запись в лог делается только при изменении состояния связи

# инициализация переменной результата, по умолчанию считается, что связь уже есть
result=connected
# смена текущего каталога перед записью лога
cd /var/log
echo `date +%Y.%m.%d__%H:%M:%S`' Автоматический запуск скрипта при загрузке сервера' >> inet.log
# бесконечный цикл
while [ true ]; do
    # пинг google.com с последующей проверкой на ошибки
    errorscount="$(ping -c 3 google.com 2<&1| grep -icE 'unknown|expired|unreachable|time out')"
    # если предыдущий пинг был удачен, а текущий нет, т.е. вывод ping содержит ошибки, то
    if [ "$result" = connected -a "$errorscount" != 0 ]; then
	# запоминаем результат текущего пинга
	result=disconnected
	# и пишем в лог время разрыва соединения
	echo `date +%Y.%m.%d__%H:%M:%S`' * Cвязь отсутствует' >> inet.log
    fi
    # если предыдущий пинг был неудачен, а текущий успешен, то
    if [ "$result" = disconnected -a "$errorscount" = 0 ]; then
	# запоминаем результат текущего пинга
	result=connected
	# и пишем в лог время установки соединения
	echo `date +%Y.%m.%d__%H:%M:%S`' Связь восстановлена' >> inet.log
    fi
    # минутная задержка
    sleep 60
done

И под конец, музыкальная пауза — посвящается нашему прову :)