В нашем городе появился новый провайдер интернет FreshTel - мой шанс получить безлимитный доступ во всемирную паутину. Каково же было мое разочарование, когда я обнаружил, что роутер периодически (от нескольких минут до нескольких часов) "зависает". Он продолжает давать доступ к WEB интерфейсу, телнету, а вот выход в сеть через него становится невозможен. Мои исследования проблемы показали, что процесс "/sbin/dhcpcd wimax" периодически перезагружается (меняется его pid), а иногда просто завершает свою работу. Восстановить работу роутера помогает команда reboot, данная в его консоли. Для автоматизации процесса я написал несколько скриптов.
Скрипт swc-3200 - запускается по крону с интервалом 5 - 10 минут:
#! /bin/sh
site1="http://www.yandex.ru/"
site2="http://www.gogle.ru/"
site3="http://www.forumnov.ru/"
logfile="/var/log/swc-3200.log"
# Проверка доступа к сайтам.
if wget -q -O /dev/null $site1
then exit 0
fi
echo `date` " Нет доступа к "$site1 >> $logfile
if wget -q -O /dev/null $site2
then exit 0
fi
echo `date` " Нет доступа к "$site2 >> $logfile
if wget -q -O /dev/null $site3
then exit 0
fi
echo `date` " Нет доступа к "$site3 >> $logfile
# Нет доступа ни к одному сайту.
# Проверяем запущен ли "/sbin/dhcpcd wimax".
dhcpcd=`./swc-3200_dhcpcd.sh | grep -s "/sbin/dhcpcd wimax"`
if echo $dhcpcd | grep -q "wimax"
then
echo `date` " Процесс \"/sbin/dhcpcd wimax\" запущен. pid = " `echo $dhcpcd | awk '{print $2}'` >> $logfile
exit 0
fi
# Перезагрузка роутера.
echo `date` " Процесс \"/sbin/dhcpcd wimax\" отсутствует." >> $logfile
echo `date` " Подключение к интернет отсутствует, начата перезагрузка роутера." >> $logfile
./swc-3200_reboot.sh
exit 1
В своей работе он использует еще два скрипта.
swc-3200_dhcpcd.sh :
#!/usr/bin/expect
set remote_server 192.168.1.1
set user admin
set password admin
spawn telnet $remote_server
expect "vincent7 login:" {send "$user\r"}
expect "Password:" {send "$password\r"}
expect "#" {send "ps -aux\r"}
send "exit\r"
expect eof
И swc-3200_reboot.sh :
#!/usr/bin/expect
set remote_server 192.168.1.1
set user admin
set password admin
log_user 0
spawn telnet $remote_server
expect "vincent7 login:" {send "$user\r"}
expect "Password:" {send "$password\r"}
expect "#" {send "reboot\r"}
log_user 1
send "exit\r"
expect eof
Для их работы необходимо поставить пакет expect.
apt-get install expect
Скрипты swc-3200, swc-3200_dhcpcd.sh и swc-3200_reboot.sh я положил в /etc/cron.5minute , а в /etc/crontab добавил строчку:
*/5 * * * * root cd / && run-parts --report /etc/cron.5minute
Такое, на первый взгляд, безрассудство как помещение swc-3200_dhcpcd.sh и swc-3200_reboot.sh в крон возможно благодаря тому, что в Debian крон не выполняет скрипты с точкой в их имени.
PS Первоначально эта заметка была опубликована мной на сайте http://www.slovensk.su/forum/viewtopic.php?f=88&t=1378&sid=8b0f6928a0f3dcb0e0eb1c83a8c28493
Перенесена сюда для удобства поиска...