Видео ролики бесплатно онлайн

Смотреть русское видео

Официальный сайт hauteecole 24/7/365

Смотреть видео бесплатно

xT 25.02.2009 12:20

How-to`sПростой скрипт мониторинга связи и рестарта ADSL-модема

Несколько дней назад писал сей текст на Хабр в Песочницу, но дальше дело не пошло; расстроился не сильно =) напишу и сюда, может пригодиться кому...

Имеем на входе нестабильную АДСЛ-линию, где периодически и бессистемно пропадает связь, причем соединение на модеме не рветься, и он продолжает "думать" что все ОК.

На выходе имеем простой скрипт проверки доступности связи и рестарта адсл-модема, если эта связь отсутствует

В наличии:
Debian 4.0 r5
ZyXEL P660RU2 EE

Для отправки модему команд нам понадобиться утилитка expect. Поэтому установим ее:
1
apt-get install expect


Cкрипт перезагрузки ADSL-линии
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/expect
#Адрес модема
set MyModem "xxx.xxx.xxx.xxx"

#Пароль модема
set MyPass "xxxxxxxxxxxx"

#Соединяемся с модемом через телнет:
spawn telnet $MyModem

#Ожидаем запроса пароля:
expect "Password:"

#Посылаем пароль, который мы определили выше:
send "$MyPass\r"

#Ожидаем приглашения ввода консоли модема:
expect "P660RU2>"

#Посылаем модему сигнал закрытия ADSL-линии
send "wan adsl close\r"

#Ждем пару секунд
sleep 2

#Ожидаем приглашения ввода консоли модема:
expect "P660RU2>"

#Посылаем модему сигнал открытия ADSL-линии
send "wan adsl open\r"

#Посылаем модему сигнал выхода из консоли
send "exit\r"

#Ждем символа конца строки
expect eof



Сохраним данный скрипт в каком-либо месте ( у меня это /usr/local/bin ), с произвольным именем ( у меня modem_adsl_restart )

Дадим ему права на запуск:
1
chmod +x /usr/local/bin/modem_adsl_restart



Скрипт, проверяющий наличие откликов от удаленных серверов

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash

#Определяем какие хосты мы будем пинговать
HOSTS="213.180.204.8 74.125.45.100 195.162.32.5"

#Определяем адрес модема
MYMODEM="192.168.10.245"

#Определяем количество пингов на каждый хост
COUNT=3

#Инициализируем переменную, хранящую количество положительных откликов
goodping=0

#Функция получения числа откликов от нужного хоста
function tuktuk()
{
ping -c $COUNT $1 | grep 'received' | awk -F',' '{print $2}' | awk '{ print $1 }'
}

#Проверяем доступен ли сам модем, если он доступен, то приступаем к проверке доступности ресурсов
count=$(tuktuk $MYMODEM)
if < $count -ne 0 >; then
#Циклично проверяем каждый хост из списка
for myHost in $HOSTS
do
#Получаем отклики от хоста
count=$(tuktuk $HOSTS)
if < $count -eq 0 >; then
#Если откликов нет, то выводим сообщение
echo "$(date) ping to $myHost is failed :("
else
#Если отклики есть, то складываем их в переменную, и выводим сообщение.
let "goodping = $goodping + $count"
echo "$(date) ping to $myHost is very nice :)"
fi
done

#Проверяем общее количество откликов, если оно равно нулю, то выполняем скрипт перезагрузки адсл-линии
if < $goodping -eq 0 >; then
echo "All pings failed... restarting.."
/usr/local/bin/modem_adsl_restart
echo "ADSL line restarted"
fi
else
#Если же модем недоступен (выключен, выпал кабель и т.д. и т.п.), то выводим сообщение о его недоступности
echo "$MYMODEM is not available :("
fi



Сохраняем там же где и предыдущий скрипт (не суть важно где, у меня опять же /usr/local/bin) c произвольным именем (у меня это ping_test)

Даем права на запуск:
1
chmod +x /usr/local/bin/ping_test



Лог
Для сохранения вывода наших скриптов создадим директорию и файл в /var/log
1
2
mkdir /var/log/ping_test
touch /var/log/ping_test/pinglog.log



Планировщик
Для того, чтобы скрипт вызывался периодически, добавим задание в cron:
Создаем в папке /etc/cron.d/ файл с произвольным именем (у меня это modem) и пишем в него

1
*/3 * * * * root if < -x /usr/local/bin/ping_test > && < -x /usr/local/bin/modem_adsl_restart >; then /usr/local/bin/ping_test >> /var/log/ping_test/pinglog.log 2>&1; fi


Т.е. каждые три минуты проверяем, есть ли права на запуск у наших скриптов, если есть, то запускаем проверку откликов и перенаправляем вывод в наш лог-файл.

Собственно, всё. Теперь ждем пока пропадёт сигнал и сработают наши скрипты :)


Тэги: adsl bash cron expect ping модем мониторинг скриптинг
+ 10 -
Похожие Поделиться

polatov 25.02.2009 12:24 #
+ 1 -
под кат и еще ошибка в заглавии s/ADLS/ADSL
xT 25.02.2009 12:27 #
+ 3 -
fixed
polatov 25.02.2009 13:38 #
+ 0 -
ADSL D-link D500T почему-то после выключения и включения электричества перестает работать пока не перезапустишь его из под веб-интерфейса. При чем там видно, что нету коннекта с WAN. С этим модемом я имел дело на работе. Исключительно положительные впечатления, но дома он ведет себя нехорошо.
xT 25.02.2009 14:18 #
+ 3 -
а через телнет, подобным образом, возможно перезапускать?
polatov 25.02.2009 14:41 #
+ 0 -
не знаю. даже не слышал о такой возможности. если просвятишь - буду рад.
xT 25.02.2009 15:17 #
+ 3 -
На фтп.длинк.ру лежит вот такой файлик
ftp://ftp.dlink.ru/pub/ADSL/DSL-500T/Description/TI_%20CLIV01.DOC
может тебе поможет команда reboot =)
exelens 25.02.2009 14:18 #
+ -3 -
Попробуй кабель получше положить дома, затухание наверное сильное.. у меня были дома проблемы с ADSL... Стоило проложить новый кабель как всё стало как часы.
polatov 25.02.2009 14:40 #
+ 0 -
у меня отличнейший заводской патчкорд от модема до машины. либо имеется в виду телефонный кабель?
a1fred 25.02.2009 17:55 #
+ 0 -
Я тоже такое чудо чуть не написал. Пока не понял что модем у меня подвисает, а не дисконектится;(
mvt 29.05.2010 17:55 #
+ 0 -
А я упростил эту связку, т.к. такую схему я уже пытался использовать - не прокатило. Скрипт на expect сам по себе работал, а в связке не хотел почему мне не известно.
Поэтому, решено, не без гугления заменить скрипт на expect на еще один bash/
В него была добавлена одна строчка пойманная при заходе через веб-морду: wget -q http://192.168.1.1/rebootinfo.cgi
Если ваш новый скрипт называется как-то по-другому, то измените путь к нему указанный в 47-ой строчке скрипта ping_test.
cppmm 29.05.2010 18:13 #
+ 0 -
Немного не в тему...
Я вот как-то с expect'ом ковырялся, но к своему стыду не осилил и пришлось изначально планируемую связку expect+bash полностью переписать на perl. Вот, может кто-нибудь выложит по expect'у чего-нибудь интересное? Только не на школьном уровне IBM developerWorks, а как-нибудь поглубже и подробнее?
stass 27.01.2014 23:23 #
+ 0 -
я может тоже не в тему, но почти все написанное на баше я в результате переписывал на perl )
dront78 31.01.2014 10:23 #
+ 0 -
это просто разные полушария головного мозга задействованы.
ничего страшного )
Perpetuum_Mobile 21.01.2011 16:17 #
+ 0 -
на днях наваял однострочник под такую же задачу:
curl -d "Restart=RESTART" http://LOGIN:PASSWORD@IP/Forms/tools_system_1путь к тулсине выцепил тоже курлом, скормив ему путь к странице админки модема с кнопкой для рестарта.
пока использую в ручном режиме, не настолько доверяю автоматике)
Tenyoff 24.01.2014 11:30 #
+ 0 -
Я понимаю что этот пост уже не актуален но все токи хочу на удачу задать вопрос автору.. Есть ли подобные решения на OS windows?

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн