internet :: проверка связи с внешним миром
raskapulk 24 января, 2007 - 16:21
сетуация такая:
юзаю инет по выделинке, провайдер так себе - ч\з пень колода качество связи, часто рвется vpn
хочу написать скрипт, который проверяет наличие связи с внешним миром пингуя к примеру ya.ru (213.180.204.8) c периодом в минуту, если ответа нет, то реконнект [/etc/init.d/inet restart] vpn, реализован скрипт(примитивный), сильно не пиннайте если глупо написано..
cat /etc/init.d/inet #!/sbin/runscript MY_GW="10.10.10.10" start(){ ebegin "Starting VPN" ebegin " Load module ipip" /sbin/modprobe ipip && \ eend $? ebegin " Load module ip_gre" /sbin/modprobe ip_gre && \ eend $? ebegin " Up pptp to 10.10.10.10 for VPN" pppd call vpn eend $? eend 0 } stop(){ ebegin "stopping VPN" ebegin " stopping PPP" /usr/sbin/poff -a /sbin/modprobe ip_gre -r /sbin/modprobe ipip -r /sbin/modprobe tunnel4 -r eend $! eend 0 }
желательно бы готовый вариант, наверно в 3 строчки пишется, и наверно ч\з Cron, вот только с ним я не знаком...
»
- Для комментирования войдите или зарегистрируйтесь
Лучше
Лучше настроить по-нормальному сеть (через /etc/conf.d/net) и проверять на наличие поднятого ppp0 по крону. Если нет - то /etc/init/net.ppp0 restart
_________________
Это заговор квадратикофф!!!
From Siberia with Love!
У меня такая же
У меня такая же ботва с провом.
Только как по крону-то проверить? При разрыве связи со стороны прова ppp0 не падает (т.е. связи нет, а при /etc/init.d/net.ppp0 start выдает "* WARNING: net.ppp0 has already been started.")
Сам над этой проблемой голову ломаю - пока тоже пришел к мысле о пинге (только не красиво это как-то, имхо).
а если делать
а если делать не
/etc/init.d/net.ppp0 start
аrestart
?_________________
... в дополнение
... в дополнение к restart ... некоторые владельцы skystar2 используют следующий подход для проверки: - регулярно (cron - ежеминутно) проверяют наличие входящего трафика (ifconfig-ifconfig) в интервале нескольких секунд (например 4) - если в это время трафика нет то принудительно перегружают интерфейс (restart) ...
... можно попробовать, что нибудь похожее ...
2 sungreen: не понял
2 sungreen:
не понял что за ifconfig-ifconfig?
Но это в любом случае не подойдет - т.к. у меня нет постоянного входящего трафика.
Следовательно, если я периодически захожу на свой комп по ssh - чтоб проверить как там дела, то в перерывах между ssh сессиями у меня будет постоянно перегружаться интерфейс.
Боюсь мой пров такой натуги не вынесет и на его стороне просто порт подвиснет :))
...
...
#!/bin/sh
iface=ppp0
ONE=`ifconfig $iface | grep "RX byte" | awk '{print $2}' | tr -d [:alpha:] | tr -d [:punct:]`
sleep 4
TWO=`ifconfig $iface | grep "RX byte" | awk '{print $2}' | tr -d [:alpha:] | tr -d [:punct:]`
if [ $ONE = $TWO ]; then
рестарт интерфейса
fi
... смысл в том, что бы не ждать когда отвалится, а регулярно проверять и если трафика в 4х секундном интервале не было (никто не качает или уже отвалилось), то принудительно делать рестарт ...
а между
а между сравнениями крутить пинг, еси входящего нету, кердык соединение, граммотно и просто =)
... если даже не
... если даже не кердык, но входящего нет - то есть никто не качает (по этому рестарт никому не повредит) - рестарт! ... а если входящий есть, то не кердык полюбому ;) ...
работает =)но
работает =)
но работает тогда, когда интервейс явно поднят
хотелось бы добавить проверку того, поднят ли интервейс ppp0, если не поднят, то поднять
я б сам написал, если б язык знал... =)
ps
как добавить правило крону( опрашивать скрипт если существует /var/run/inet с интервалом 15 сек)? капался в конфигах в районе /etc/cron.* примеров ни нашел =(
и что нужно дописать в /etc/init.d/inet, чтоб при успешном старте создавался /var/run/inet с pid внутри.
... if !(ifconfig | grep
... например, if !(ifconfig | grep 'ppp0'); then поднять ppp0; fi ...
... но, ifconfig-ifconfig должен вызывать рестарт даже если интерфейс не поднят!, а задача рестарта - поднять интерфейс ...
ps на ps
... хз, можно в самом скрипте слипать ...
Если делать
2 iNDiAnFLy:
Если делать restart - то само собой прокатит. Только это когда я сижу за компом и вижу , что сайтики открываться перестали - сл-но дисконнект и сл-но restart. Но если, к примеру, я поставил что-то на закачку, лег спать, и через минут 10 случится дисконнект, то как система определит это? Интерфейс-то она считает поднятым :)
Моё чудо
Я в когда понадобилось быстренько сваял скрипт. Впринципе он кривенький, я не силен в шелл-скриптах, но у меня оно работает на ура.
Нужно многое что переделать, хотя бы проверять тот же код выхода ping, а не его вывод. Еще очень жутко выглядит проверка сколько пингов на контрольных прошло. Для отладки сделал так, нужно бы переделать, но мне влом это делать =)
Скрипт пингует раз в 30 секунд. Если пинг не прошел, он делает 3 контрольных пинга. Если все 3 проходят то скрипт считает что все нормально, если нет, то уведомляет.
Далее в случае глюка скрипт рассылает через самбу на виндовые клиенты уведомления. Эту часть поменять можно под себя.
Вобщем скрипт написан жутко, не пинайте, писал в спешке и некогда было особо разбираться в bash'e. Написал, работая, я забыл =/
скрипт на bash:
скрипт на bash: проверять вывод пинга(указав в параметрах один запрос и максимальный таймаут) утилитой grep на наличие строки 100%, если есть 100% значит пинг не прошел, рестартить интефейс. Потом ложится спать на n секунд (sleep).... и все это в бесконечном цикле. Далее nohup'ом кидануть в фон.
Это самый простой вариант.
http://gentoo.ru/node/5373
мб на какие-то мысли подтолкнет )
У кого ADSL ETH
То собственно по телнету может опросить наличие соединения от "коробки" и сделать рестарт.
Правда вот бывает что коробочки "отпадают" и тогда помогает только холодный старт. ((