Здравствуйте,искал поиском-ненашел(мож плохо искал)
как можно такое реализовать?
есть 3G модем в ubunta 10.04-нужно написать скрипт который каждую минуту или две будет пинговать узел в инете например гугл и если неудачно то переподключать модем?
и второе-скрипт поддержки инет соеденения-т.е каждую минуту будет или пинг или посылать маленький пакет в инет?
Прошу помощи в создании скрипта
переподключать не зная как подключается модем вам никто не скажет...)))
в лоб - узнать какой модуль его использует(например module) и тогда сделать скрипт что-то типа такого:
#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
modprobe -r module &>/dev/null
modprobe module &>/dev/null
fi
данный скрипт прописать в кронтаб и запускать от пользователя root
Соответственно выставить проверку раз в 1 или 2 минуты в кронтабе.
подключаю модем через усби
а скрипт нужен для того что если какое то время не пользуешься интернетом но модем подключен и интернет есть то связь отваливается-поэтому нужно что бы скрипт пинговал с заданной периодичностью какой нибудь узел тот же гугл и если нет ответа в течении скажем десяти секунд то он разрывает соеденение в wvdial и подключает снова
зачем понятно... но телепаты в отпуске... я например не знаю каким образом Ваша Модель стартует и останавливается и посему не могу рекомендовать метода старта-стопа оного девайса. Это даже без скрипта. )))
скрипт - это список команд. Если вы скажите какими командами останавливаете службу и какими запускаете то поправлю скрипт...
к сожалению не знаю как смотреть-
а на счет запуска просто запускаю wvdial настроенный на порт ttyUSB0 и соединяюсь с нэтом
конрол+С останавливаю
как то так
тогда можно попробовать так:
#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi
Проверьте этот скрипт в работе(когда канал работает). если переподключение произойдет начнете его в кронтаб прикручивать...
выполнять скрипт под рутом
к сожалению сейчас на работе-приеду домой через недельку-попробую
спасибо за помощь
#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi
этот скрипт как работает-пингует до тех пор пока не будет пинга и потом переподключает модем -или как?
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
вот здесь не совсем понятно-что писать и как(уж простите за вопросы если они идиотские)
еще вопрос-как бы сделать так что бы скрипт запускался только когда есть интернет(если в крон положить то будет запускаться даже без инета)
т.е запустил wvdial и либо wvdial запустит этот скрипт либо по другому как то?
тогда можно попробовать так:
#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi
что за страсть к экспериментам? Я и так вам скажу, что ваш скрипт работать НЕ будет.
Ибо $? всегда определена, и там всегда число. Потому ваш скрипт ничего проверять не будет. надо команду ping засунуть в if
#!/bin/sh
if ping -c 1 ya.ru &>/dev/null
then
echo всё ок
else
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fidrBatty,
да ошибся... я забыл и почему-то думал что -n это не нулевое значение, а не длина...(((
в вашем скрипте эхо как раз лишнее. ибо будет использоваться в кроне и вывод будет лишним...
vlad777,
этот скрипт для разового использования. если будет работать то вставьте его в кронтаб рута.
#!/bin/sh
if ping -c 1 ya.ru &>/dev/null
then
echo всё ок
else
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi
если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?
да ошибся... я забыл и почему-то думал что -n это не нулевое значение, а не длина...(((
test -n это действительно "не пусто".
т.е. не ноль символов.
в вашем скрипте эхо как раз лишнее. ибо будет использоваться в кроне и вывод будет лишним...
не помешает. К тому же, синтаксически тут должна быть команда. И логичнее.
если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?
if ping -c1 server1; then
if ping -c1 server2; then
echo "All OK"
exit 0
fi
fi
# презагрузка.
[quote=vlad777]если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?
if ping -c1 server1; then
if ping -c1 server2; then
echo "All OK"
exit 0
fi
fi
# презагрузка.
[/quote]
Странное условие. Логично было бы:
проверяем пинг на сервер.
Если пинг есть - выходим
Если пинга нет - проверяем другой.
Список серверов в масссив.
Если прошли весь список и не получили ответ тогда перегружаемся.
А пинговать каждую минуту весь список серверов не логично.
спасибо - попробую по приезду домой
и все таки еще один вопрос-как сделать что бы скрипт запускался только тогда когда есть инет?
и немножко изменить-тоесть при подъеме соеденения с инетом запускался скрипт который постоянно будет пинговать два-три адреса по 1 байту (бесконечно) и если пропадает пинг ждет секунд 10 потом повтор пинга и если пинга опять нет то рестартит USB модем?
if ping -c1 server1
then
exit 0
fi;
if ping -c1 server2
then
exit 0
fi
if ping -c1 server3
then
exit 0
fi
#иначе перезагрузка модема
killall wvdial &>/dev/null
wvdial profile &>/dev/null
exit 1
Логично чтоб он не запускался если модем не запущен...
Соответственно можно сделать запуск этого скрипта в фоне когда запускаете интернет ввдиалом...
Например данный скрипт называется test3g.sh
то базовый скрипт(например start3g.sh) должен быть таким:
echo $$ > /tmp/start3g.pid
wvdial profile &>/dev/null
while (true)
do
/full/path/to/test3g.sh
sleep 5 # время задержки
done;
Также создать скрипт(stop3g.sh) шутдауна интернета
read A3G < /tmp/start3g.pid
kill $A3G
killall wvdial
rm /tmp/start3g.pid
ОК - спасибо- буду пробовать
а куда положить эти файлы
start3g.sh
stop3g.sh
в какие директории?
или можно в дом.папку?
не работает скрипт
#!/bin/bash
while [1] do
ping -c 3 -s 1 google.com
sleep 5
done;
в терминале пишет строка 5: ошибка синтаксиса около неожиданной лексемы `done'
./pi: строка 5: `done;'
в чем ошибка?
while [1] do
Либо так
while :; doлибо так
while :
do
...и после done точка с запятой ни к чему.
спасибо-заработало
как это дело сделать так что бы при загрузке запускалось в терминале?