Были ситуации когда интернет как бы «зависал», но при этом соединение не отваливалось. Пришлось немного помучится и в итоге появился на свет скрипт для автоматической проверки наличия соединения и его переподключения в случае отсутствия доступа в инет.
Далее следует код bash скрипта, который следует запихать в cron на проверку через n-ое кол-во минут/секунд. Пояснения к скрипту в конце.
TESTHOST="8.8.8.8"
LOGFILE="/var/log/inettest.log"
ping -c 1 -w 5 $TESTHOST &>/dev/null
if [ $? -ne 0 ]
then
read LOG < $LOGFILE
if [ $LOG = 0 ]
then
cat /dev/null > $LOGFILE
echo 1 > $LOGFILE
fi
if [ $LOG = 1 ]
then
cat /dev/null > $LOGFILE
echo 2 > $LOGFILE
fi
if [ $LOG = 2 ]
then
cat /dev/null > $LOGFILE
echo 0 > $LOGFILE
fi
else
cat /dev/null > $LOGFILE
echo 0 > $LOGFILE
fi
Смысл скрипта в следующем:
1. Устанавливаем хост, который будем пинговать (я выбрал 8.8.8.8 — гуглоDNS как один из самых стабильных), а так же местоположение лог файла с данными проверки.
2. Пингуем хост
3. Далее мы выполняем проверку на то, что же в нашем log файле.
Если 0, то предыдущая проверка инета была удачной.
Если 1, то предыдущая проверка инета была неудачной.
Если 2, то это уже вторая проверка и инет все еще не работает, а значит рестартим pppoe или вообще всю сеть (для прямых линков по ethernet) и обнуляем.
Вот в принципе и всё. Данная реализация не претендует на образцовость и сделана для облегчения жизни домашнего сервера с не очень хорошим инетом. Возможностей для модификаций множество, а так же и решений данной проблемы. Мне же хватило этого.
Если кому-то пригодится, то это будет просто отлично :)
Скрипт размещен в публичном репозитории на GitHub: inet_checker
|