Мой дом.

В нашем городе появился новый провайдер интернет 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
Перенесена сюда для удобства поиска...

Сделать бесплатный сайт с uCoz