LinuxForum.Fans
Тема

Прошу помощи в создании скрипта

Автор: vlad777 36 сообщений 5835 просмотров
#224751

Здравствуйте,искал поиском-ненашел(мож плохо искал)
как можно такое реализовать?
есть 3G модем в ubunta 10.04-нужно написать скрипт который каждую минуту или две будет пинговать узел в инете например гугл и если неудачно то переподключать модем?
и второе-скрипт поддержки инет соеденения-т.е каждую минуту будет или пинг или посылать маленький пакет в инет?

#224752

переподключать не зная как подключается модем вам никто не скажет...)))
в лоб - узнать какой модуль его использует(например 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 минуты в кронтабе.

#224757

подключаю модем через усби
а скрипт нужен для того что если какое то время не пользуешься интернетом но модем подключен и интернет есть то связь отваливается-поэтому нужно что бы скрипт пинговал с заданной периодичностью какой нибудь узел тот же гугл и если нет ответа в течении скажем десяти секунд то он разрывает соеденение в wvdial и подключает снова

#224806

зачем понятно... но телепаты в отпуске... я например не знаю каким образом Ваша Модель стартует и останавливается и посему не могу рекомендовать метода старта-стопа оного девайса. Это даже без скрипта. )))
скрипт - это список команд. Если вы скажите какими командами останавливаете службу и какими запускаете то поправлю скрипт...

#224814

к сожалению не знаю как смотреть-
а на счет запуска просто запускаю wvdial настроенный на порт ttyUSB0 и соединяюсь с нэтом
конрол+С останавливаю
как то так

#224858

тогда можно попробовать так:

#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi

Проверьте этот скрипт в работе(когда канал работает). если переподключение произойдет начнете его в кронтаб прикручивать...

#224859

выполнять скрипт под рутом

#224882

к сожалению сейчас на работе-приеду домой через недельку-попробую
спасибо за помощь
#!/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 запустит этот скрипт либо по другому как то?

#224996
Харитон написал:
тогда можно попробовать так:

#!/bin/sh
ping -c 1 ya.ru &>/dev/null
if [ -n "$?" ]
then
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi

что за страсть к экспериментам? Я и так вам скажу, что ваш скрипт работать НЕ будет.
Ибо $? всегда определена, и там всегда число. Потому ваш скрипт ничего проверять не будет. надо команду ping засунуть в if

text
#!/bin/sh
if ping -c 1 ya.ru &>/dev/null
then
 echo всё ок
else
 killall wvdial  &>/dev/null
 wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
                                   # только перенаправление на дев-нулл оставте
fi
#225056

drBatty,
да ошибся... я забыл и почему-то думал что -n это не нулевое значение, а не длина...(((
в вашем скрипте эхо как раз лишнее. ибо будет использоваться в кроне и вывод будет лишним...

vlad777,

этот скрипт для разового использования. если будет работать то вставьте его в кронтаб рута.

#225059

#!/bin/sh
if ping -c 1 ya.ru &>/dev/null
then
echo всё ок
else
killall wvdial &>/dev/null
wvdial profile &>/dev/null # <= тут пишете ту строку какую вы используете при соединении
# только перенаправление на дев-нулл оставте
fi
если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?

#225092
Харитон написал:
да ошибся... я забыл и почему-то думал что -n это не нулевое значение, а не длина...(((

test -n это действительно "не пусто".
т.е. не ноль символов.

Харитон написал:
в вашем скрипте эхо как раз лишнее. ибо будет использоваться в кроне и вывод будет лишним...

не помешает. К тому же, синтаксически тут должна быть команда. И логичнее.

vlad777 написал:
если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?
text
if ping -c1 server1; then
  if ping -c1 server2; then
   echo "All OK"
   exit 0
  fi
fi
# презагрузка.
  
#225095
drBatty написал:

[quote=vlad777]если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?
text
if ping -c1 server1; then
  if ping -c1 server2; then
   echo "All OK"
   exit 0
  fi
fi
# презагрузка.
  

[/quote]
Странное условие. Логично было бы:
проверяем пинг на сервер.
Если пинг есть - выходим
Если пинга нет - проверяем другой.

Список серверов в масссив.

Если прошли весь список и не получили ответ тогда перегружаемся.

А пинговать каждую минуту весь список серверов не логично.

#225096

спасибо - попробую по приезду домой
и все таки еще один вопрос-как сделать что бы скрипт запускался только тогда когда есть инет?
и немножко изменить-тоесть при подъеме соеденения с инетом запускался скрипт который постоянно будет пинговать два-три адреса по 1 байту (бесконечно) и если пропадает пинг ждет секунд 10 потом повтор пинга и если пинга опять нет то рестартит USB модем?

#225110

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

#225111

ОК - спасибо- буду пробовать

#225119

а куда положить эти файлы
start3g.sh
stop3g.sh
в какие директории?
или можно в дом.папку?

#226502

не работает скрипт

#!/bin/bash
while [1] do
ping -c 3 -s 1 google.com
sleep 5
done;

в терминале пишет строка 5: ошибка синтаксиса около неожиданной лексемы `done'
./pi: строка 5: `done;'


в чем ошибка?

#226503
vlad777 написал:
while [1] do

Либо так

text
while :; do

либо так

text

while :
do

...и после done точка с запятой ни к чему.

#226505

спасибо-заработало
как это дело сделать так что бы при загрузке запускалось в терминале?

Войдите или зарегистрируйтесь, чтобы ответить.