Програмная автоматическая перезагрузка модема

Автор Gucul, апреля 23, 2013, 22:08:31

« предыдущая - следующая »

Gucul

Ситуация следующая. Модем intercross 5633e (PPPoE) периодически теряет соединение. После перезагрузки модема соединение восстанавливается. Тех. поддержка не скрывая указывает на то, что проблема не аппаратная, а на линии. Так вот вопрос заключается в том, как автоматически производить restart модема при разрыве связи.

p/s: прошу благосклонно отнестись к разрешению моей проблемы т.к. с Xubuntu я знаком недавно. В гугл ходил, читал и от поверхностных разъяснений в голове ничего кроме каши не прибавилось ))

xf∞

если вы настраивали соединение в терминале через команду sudo pppoeconf, то попробуйте там написать sudo pon
если не поможет, то нужно попробовать настроить соединение в network-manager'е.
Делаю нескучные обои и рисую темы для xfce.

Gucul

Цитата: xf∞ от апреля 23, 2013, 22:52:35
если вы настраивали соединение в терминале через команду sudo pppoeconf

Так я не настраивал. Моя настройка заключалась лишь в том, что я забил в проводное соединение "Wired connectеon" IP, маска, шлюз, DNS и инет завелся. Мне нужен скрипт, чтобы подымать соединение при разрыве связи. В силу того, что мои интеллектуальные способности пока не в силах решить данную задачу, то я прошу помощи. Объясните плиз подробно и доходчиво новичку в "лине", что нужно сделать. Какой скрипт, в какой директории и как его запустить.
xf∞, все одно спасибо, что откликнулись!

VJM

апреля 24, 2013, 02:05:11 #3 Последнее редактирование: апреля 24, 2013, 03:08:07 от VJM
Немного не ясно причем тут линукс, если модем отдельное устройство и именно оно управляет соединением?

Модем в каком режиме настроен?
Для точного ответа нужен точный вопрос.

Хочешь такой userbar?

Gucul

Цитата: VJM от апреля 24, 2013, 02:05:11
Немного не ясно причем тут линукс, если модем отдельное устройство и именно оно управляет соединением?

Скрипт с определенным интервалом времени опрашивает заданный сервер при отсутствии пинг-ответа посылает команду в телнет о перезагрузке модема
Цитата: VJM от апреля 24, 2013, 02:05:11
Модем в каком режиме настроен?

Роутер

VJM

Если в режиме роутера, то соединением управляет не система, а непосредственно модем. И рестартить соединение придется только на нём. Вообще он так и должен делать сам. На большинстве модемов есть функция автодозвона в случае потери коннекта.

Посмотрите такое решение Вашей проблемы. ССЫЛКА. Если решение толковое, прошу отписаться и оно пойдёт на главную сайта.
Для точного ответа нужен точный вопрос.

Хочешь такой userbar?

Gucul

Цитата: VJM от апреля 24, 2013, 13:25:32
Если в режиме роутера, то соединением управляет не система, а непосредственно модем. И рестартить соединение придется только на нём. Вообще он так и должен делать сам. На большинстве модемов есть функция автодозвона в случае потери коннекта.

Так предусмотрено и должно быть, а на деле линия ресетит модем да так хитро это делает, что модем в этот момент всеми своими индикаторами сигналит, что все путем и он в сети даже не пытается рестартить.
Цитата: VJM от апреля 24, 2013, 13:25:32
Посмотрите такое решение Вашей проблемы. ССЫЛКА. Если решение толковое, прошу отписаться и оно пойдёт на главную сайта.

Благодарю! Курю инфу. О результате несомненно отпишусь!

Gucul

Цитата: VJM от апреля 24, 2013, 13:25:32
ССЫЛКА. Если решение толковое, прошу отписаться и оно пойдёт на главную сайта.


Бился день-ночь и к сожалению ничего хорошего, как впрочем и плохого по этим скриптам сказать не могу они у меня попросту не завелись (хотя вру хорошее все же скажу, данный мануал мне дал кое-какое представление о происходящем и дальнейшую опору изголятся над другими скриптами).
Итак, что на сегодняшний день, что я имею:

Скрипт для проверки соединения touchmodem_ping.sh в ручном режиме запускается, но при странных особенностях в логе пишет, что соединение есть даже если выдернуть телефонный провод из модема ))

#!/bin/bash                                                                                                                         
# часы                                                                                                                             
date_time="`date +%H:%M:%S`"                                                                                                       
# дата                                                                                                                             
date="`date +%d-%m-%Y`"                                                                                                             
#Тестируемый адрес                                                                                                                 
testip="ya.ru"                                                                                                             
                                                                                                                                   
kol=$(/bin/ping -c 4 $testip | grep "received" | awk '{print $4}')                                                                 
if [ $kol == 0 ]                                                                                                                   
    then                                                                                                                           
        echo "Нет пинга, Ждём 1 минуту" | logger -t NOPING                                                                         
        sleep 10                                                                                                                   
        kol=$(/bin/ping -c 4 $testip | grep "received" | awk '{print $4}')                                                         
            if [ $kol == 0 ]                                                                                                       
                then                                                                                                               
                    /scripts/touchmodem_reboot.sh                                                                                   
                    echo '<p style="line-height:100%; margin-top:0; margin-bottom:0;">'$date $date_time '  Нет интернета. Начат перезапуск модема.</p>' >> /var/www/html/netsrv.info/status.html
                    echo $date $date_time Нет интернета. Начат перезапуск модема.  >> /var/log/restartinet.log                     
                exit 0                                                                                                             
            fi                                                                                                                     
fi                                                                                                                                 
echo '<p style="line-height:100%; margin-top:0; margin-bottom:0;">'$date $date_time'  Интернет есть..</p>' >> /var/www/html/netsrv.info/status.html
echo $date $date_time Интернет есть..  >> /var/log/restartinet.log


И скрипт для перезагрузки модема touchmodem_reboot.sh

#!/usr/bin/expect                                                                                                                   
                                                                                                                                   
spawn telnet 192.168.1.1                                                                                                           
sleep 3                                                                                                                             
expect "login:"                                                                                                                     
send "admin\r"                                                                                                                     
sleep 3                                                                                                                             
expect "Password:"                                                                                                                 
send "admin\r"                                                                                                                     
sleep 3                                                                                                                             
expect "#"                                                                                                                         
send "reboot\r"                                                                                                                     
sleep 3                                                                                                                             
expect eof


этот скрипт честно отрабатывает свою задачу и при запуске исправно перезагружает модем, правда тоже пока в ручном режиме, потому как cron я пока так и не победил.

p/s: скрипты наглым образом были позаимствованы в интернете ))

Gucul

Вопрос решен! Вот рабочий мануал  Автоматический перезапуск модема мною проверенно!

p:s\ автору почет и уважение за проявленную смекалку и сознательность поделится с интернет-общественностью скриптами!

Gucul

апреля 28, 2013, 04:17:22 #9 Последнее редактирование: апреля 28, 2013, 04:51:34 от Gucul
Нашел время описать ход своих действий. Думаю, что ссылки ссылками, а форуму xubuntu-ru.net не помешает свой инструктаж.

Устанавливаем expect

sudo apt-get install expect

в каталоге root создаем подкатолог skripts и туда скидываем скрипты modem_test.sh и modem_reboot.sh

скрипт modem_reboot.sh

#!/usr/bin/expect                                                                                                                   
                                                                                                                                   
spawn telnet xxx.xxx.xxx.xxx                                                                                                           
sleep 3                                                                                                                             
expect "login:"                                                                                                                     
send "admin\r"                                                                                                                     
sleep 3                                                                                                                             
expect "Password:"                                                                                                                 
send "admin\r"                                                                                                                     
sleep 3                                                                                                                             
expect "#"                                                                                                                         
send "reboot\r"                                                                                                                     
sleep 3                                                                                                                             
expect eof


Меняем Password и login при необходимости, а также  xxx.xxx.xxx.xxx на адрес своего модема

скрипт modem_test.sh

#!/bin/bash                                                                                                                         
# часы                                                                                                                             
date_time="`date +%H:%M:%S`"                                                                                                       
# дата                                                                                                                             
date="`date +%d-%m-%Y`"                                                                                                             
#Тестируемый адрес                                                                                                                 
testip="xxx.xxx.xxx.xxx"                                                                                                             
                                                                                                                                   
kol=$(/bin/ping -c 4 $testip | grep "received" | awk '{print $4}')                                                                 
if [ $kol == 0 ]                                                                                                                   
    then                                                                                                                           
        echo "Нет пинга, Ждём 1 минуту" | logger -t NOPING                                                                         
        sleep 10                                                                                                                   
        kol=$(/bin/ping -c 4 $testip | grep "received" | awk '{print $4}')                                                         
            if [ $kol == 0 ]                                                                                                       
                then                                                                                                               
                    /root/skripts/modem_reboot.sh                                                                                   
                    echo '<p style="line-height:100%; margin-top:0; margin-bottom:0;">'$date $date_time'  Нет интернета. Начат перезапуск модема.</p>' >> /var/www/html/netsrv.info/status.html
                    echo $date $date_time Нет интернета. Начат перезапуск модема.  >> /var/log/restartinet.log                     
                exit 0                                                                                                             
            fi                                                                                                                     
fi                                                                                                                                 
echo '<p style="line-height:100%; margin-top:0; margin-bottom:0;">'$date $date_time'  Интернет есть..</p>' >> /var/www/html/netsrv.info/status.html
echo $date $date_time Интернет есть..  >> /var/log/restartinet.log


"xxx.xxx.xxx.xxx" вводим адрес своего DNS

теперь при детальном рассмотрении скрипта видем строчку  /root/skripts/modem_reboot.sh которая гласит, что при отсутствии интернета скрипт modem_test.sh обращается к скрипту modem_reboot.sh и если Вы скрипты поместили в директорию /root/skripts/ то эту строку оставляем без изменений.

а также видем строки /var/www/html/netsrv.info/status.html и /var/log/restartinet.log  естественно в каталоге /var создаем эти подкаталоги и файлы под запись логов

делаем скрипты исполняемыми

sudo chmod +x /root/skripts/modem_test.sh

sudo chmod +x /root/skripts/modem_reboot.sh

даем скриптам права

sudo chmod 750 /root/skripts/modem_test.sh

sudo chmod 750 /root/skripts/modem_reboot.sh

вызываем crontab

sudo crontab -e

в crontab ввести

*/10 * * * * /root/skripts/modem_test.sh

что говорит о том, что cron будет запускать скрипт каждые десять минут

сохранить Ctrl+O потом нажать Enter и выйти Ctrl+X

От себя добавлю, что автор скриптов ссылку на которого я привел выше не рекомендует устанавливать значение меньше десяти минут. Я же поставил 30 минут, но это уже решать только Вам (более подробную информацию о cron найдете сами)
Еще хочу отметить тот факт, что это не панацея если модем завис наглухо и в этот момент нельзя выйти даже в вебморду модема, тут уже как ранее верно подметил VJM "линь" не причем. ))

VJM

Для точного ответа нужен точный вопрос.

Хочешь такой userbar?