1

Здравствуйте,искал поиском-ненашел(мож плохо искал)
как можно такое реализовать?
есть 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 минуты в кронтабе.

3

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

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

5

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

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

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

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

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

8 (27.01.2012 09:07:23 отредактировано vlad777)

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

9

Харитон пишет:

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

#!/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 # <= тут пишете ту строку какую вы используете при соединении
                                   # только перенаправление на дев-нулл оставте
fi
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10

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

vlad777,

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

11

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

12

Харитон пишет:

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

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

Харитон пишет:

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

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

vlad777 пишет:

если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?

if ping -c1 server1; then
  if ping -c1 server2; then
   echo "All OK"
   exit 0
  fi
fi
# презагрузка.
  
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

13

drBatty пишет:
vlad777 пишет:

если это скрипт разовый то тогда как прописать постоянный пинг и не одного сервера а например трех до перврго отваливания тпинга и ссответственно дальнейшей перезагрузки?

if ping -c1 server1; then
  if ping -c1 server2; then
   echo "All OK"
   exit 0
  fi
fi
# презагрузка.
  

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

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

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

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

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

14 (27.01.2012 18:09:02 отредактировано vlad777)

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

15

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

16

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

17

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

18 (03.02.2012 12:07:39 отредактировано vlad777)

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

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

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


в чем ошибка?

19

vlad777 пишет:

while [1] do

Либо так

while :; do

либо так

while :
do

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

Был, был и весь вышел...

20

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

21

vlad777 пишет:

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

А зачем пинговать каждые 5 секунд? А то ещё на «гугле» забанят ag
В wvdial, если мне не изменяет память, есть опция, в которой можно указать путь к скрипту, запускаемому при создании ppp-интерфейса.
P.S. Вы скрипт именно в таком виде хотите запускать?

Был, был и весь вышел...

22 (03.02.2012 12:30:05 отредактировано vlad777)

А зачем пинговать каждые 5 секунд?
что бы поддерживать соеденение

ввдиал пока не использую

P.S. Вы скрипт именно в таком виде хотите запускать?
если подскажите чего-то можно и по другому как нить запускать...

23

vlad777 пишет:

что бы поддерживать соеденение

Какой тип соединения (ppp, adsl. eth,...) вы используете?

vlad777 пишет:

ввдиал пока не использую

Это не принципиально: во многих дистрибутивах скрипты, запускаемые при поднятии ppp-интерфейса, можно разместить в  /etc/ppp/ip-up.d/. Часто там есть и примеры подобных скриптов.

Был, был и весь вышел...

24

я использую ppp0 через usb модем

25

vlad777 пишет:

P.S. Вы скрипт именно в таком виде хотите запускать?
если подскажите чего-то можно и по другому как нить запускать...

Я к тому, что скрипт в таком виде будет много «мусора» писать в консоль.
В конце строки с командой ping добавьте конструкцию > /dev/null 2>&1.

Был, был и весь вышел...

26

а как это прописать в /etc/ppp/ip-up.d/
и что реально могут забанить за такие частые пинги???

27

vlad777 пишет:

а как это прописать в /etc/ppp/ip-up.d/

Попробуйте дать этому скрипту имя вида 50-ping-google.sh, сделать его исполняемым и поместить в каталог /etc/ppp/ip-up.d/.

vlad777 пишет:

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

Вряд ли, хотя кто их знает  wink

Был, был и весь вышел...

28

нашел в инете

При каждом переподключении (автоматично передозванивается pppd) скрипт запускается заново. Но предыдущий тоже не вырубается. Так вот и вопрос - как при обрыве связи завершить процессы предыдущего скрипта?

я думаю для меня это тоже актуально

29 (03.02.2012 13:12:24 отредактировано vlad777)

положил в папку скрипт-не работает

может куда то еще его прописать нужно?

30

vlad777, IMHO, всё это «костыль», но...
Приведите скрипт 50-google-ping.sh к такому виду:

#!/bin/bash
echo "$$" > /var/run/`basename $0`.pid
while :
do
    ping -c 3 -s 1 google.com > /dev/null 2>&1
    sleep 5
done

Создайте скрипт 50-google-ping-kill.sh такого вида

#!/bin/bash
kill `cat /var/run/50-google-ping.sh.pid` || kill -9 `cat /var/run/50-google-ping.sh.pid`
rm -f /var/run/50-google-ping.sh.pid

...сделайте его исполняемым и поместите в каталог /etc/ppp/ip-down.d/.

Был, был и весь вышел...