скрипт для пинга (при отсутствии пинга=>разрыв соединения и переподключение)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

скрипт для пинга

Сообщение foxIG »

если можно дайте пожалуйста такой скрипт,что бы при отсутствии пинга pppd отключался и подключался заново.этот life уже задолбал,пол часа инет работает,а потом стоит.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

while :; do ping -c 3 ya.ru &>/dev/null || <команда перезапуска pppd> ; sleep <желаемый интервал между проверками (сек.)>; done
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

а можно объяснить мне тупоголовому подробнее что куда писать?
как я понял нужно создать:
#!/bin/sh
while :;
do ping -c 3 ya.ru &>/dev/null || <команда перезапуска pppd> ;
sleep <желаемый интервал между проверками (сек.)>;
done
-----------------------------------------------
или это можно прописать в ip-up?
<команда перезапуска pppd> -если можно что за команда?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

если соединение должно работать постоянно, можно так: http://linuxforum.ru/index.php?s=&show...st&p=239607
правда, встает справедливый вопрос - что, провайдерский сервер исправно отвечает на lcp-echo-запросы, но трафик не пускает?
или на запросы ответов нет, но параметры, передаваемые pppd у Вас это допускают?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

после получаса соединения падает скорость почти до 0(входящий трафик вообще не идёт), те на запросы ответов нет

# /etc/ppp/peers/
debug
115200
crtscts
modem
lock
novj
persist
nodetach
noipdefault
usepeerdns
defaultroute
connect '/usr/sbin/chat -e -f /etc/ppp/chat/connect -v'
/dev/ttyACM0
mtu 1500
user life
nobsdcomp
nodeflate


# /etc/ppp/chat
'' AT
TIMEOUT 45
ABORT 'BUSY'
ABORT 'NO CARRIER'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT 'ERROR'
REPORT 'CONNECT'
REPORT 'NO CARRIER'
REPORT 'NO DIAL TONE'
REPORT 'NO ANSWER'
REPORT 'ERROR'
'' ATE0
SAY '.....соединение с GPRS.....'
'' 'AT+CGDCONT=1,"IP","internet"'
'' ATS0=0
'' AT+CGQREQ=1,1,1,1,5,18
'' AT+CGQMIN=1,1,1,1,5,18
'' AT+CGATT?
'' ATDT*99***1#
TIMEOUT 22
CONNECT ""
SAY ' соединение с GPRS установлено'

вот параметры, может еще что нибудь добавить?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

прослушайте соединение через те самые полчаса, когда трафик уже перестает ходить.
и посмотрите, идет ли обмен lcp-запросами/ответами.
если идет нормально, для начала потрясите провайдера.
если вообще не идет, или запросы от Вас есть, а ответов нет (и соединение все-таки не разрывается), посмотрите man pppd на предмет опций, начинающихся на lcp. можно выставить интервал между запросами и количество неудачных запросов, после которых соединение будет разорвано.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: скрипт для пинга

Сообщение Poor Fred »

Я для себя написал такой скриптик:

Код: Выделить всё

if ping -c 3 www.ru | grep -e "bytes from" >/dev/null
    then echo "Internet is up! Exiting..." > /dev/null
else
    echo "Internet is down! Trying to get it working"

    if [ -f /var/run/tun0.pid ]
        then PID=`cat /var/run/tun0.pid`
    fi

    until [ ! -f /var/run/tun0.pid ]
    do
        echo "Killing process $PID"
        kill $PID
        sleep 30
    done
    /usr/sbin/ppp -ddial CityNet
    sleep 5
    ping -c 3 www.ru
fi


Запускается каждый час. Это на Фре, соединение через РРРоЕ. Цикл вставлен потому, что иногда kill/killall не сразу убивает соединение. Сообщения присылаются на рутовскую почту.
Убить всех человеков!
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

sash-kan писал(а):
13.04.2007 22:03
прослушайте соединение через те самые полчаса, когда трафик уже перестает ходить.
и посмотрите, идет ли обмен lcp-запросами/ответами.
если идет нормально, для начала потрясите провайдера.
если вообще не идет, или запросы от Вас есть, а ответов нет (и соединение все-таки не разрывается), посмотрите man pppd на предмет опций, начинающихся на lcp. можно выставить интервал между запросами и количество неудачных запросов, после которых соединение будет разорвано.


а как посмотреть идет ли обмен lcp-запросами/ответами?


если я выхожу через pppd call life, то ?

Код: Выделить всё

if ping -c 3 www.ru | grep -e "bytes from" >/dev/null
    then echo "Internet is up! Exiting..." > /dev/null
else
    echo "Internet is down! Trying to get it working"

    if [ -f /var/run/ppp0.pid ]
        then PID=`cat /var/run/ppp0.pid`
    fi

    until [ ! -f /var/run/ppp0.pid ]
    do
        echo "Killing process $PID"
        kill $PID
        sleep 30
    done
    /usr/sbin/pppd call life
    sleep 5
    ping -c 3 www.ru
fi

но тогда в /usr/sbin/pppd call life пишет что нет такой команды call
Спасибо сказали:
Аватара пользователя
TWINc
Сообщения: 179
ОС: Arch Linux Current

Re: скрипт для пинга

Сообщение TWINc »

Я для реконнекта написал вот такое чудо:

Код: Выделить всё

PROVIDER_NAME=corbina
RECONNECT_INTERVAL=1m

while true; do
   pppd call $PROVIDER_NAME nodetach
   killall pppd --wait
   sleep $RECONNECT_INTERVAL
   rm -rf /var/run/ppp*.pid
done
exit 0
Registered Linux user number #434194
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

TWINc писал(а):
14.04.2007 10:27
Я для реконнекта написал вот такое чудо:

Код: Выделить всё

PROVIDER_NAME=corbina
RECONNECT_INTERVAL=1m

while true; do
   pppd call $PROVIDER_NAME nodetach
   killall pppd --wait
   sleep $RECONNECT_INTERVAL
   rm -rf /var/run/ppp*.pid
done
exit 0

если можно подробнее...куда это писать и как запускать?
только что опять прошло пол часа,смотрел через ifconfig-на отправку идут пакеты, а на приём нет.также не пингуется
[root@localhost sbin]# ping ya.ru -r 3 -a
ping: unknown host ya.ru
т.е. проблема будет решена этим скриптом,только помогите его правильно записать куда надо
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

foxIG писал(а):
14.04.2007 10:20
а как посмотреть идет ли обмен lcp-запросами/ответами?
любым анализатором трафика. тем же tshark-ом.
по умолчанию lcp-перекличка должна происходить раз в 30 секунд. не заметить ее отсутствие/наличие сложно.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

ну а всё таки как написать и запускать этот скрипт?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

уважаемый foxIG, Вы, все-таки определиться с тем, _что_ Вам нужно.
вот список наводящих вопросов:
вопрос номер один: соединение должно быть постоянным (пока включен компьютер) или подниматься по требованию?
вопрос номер два: каким образом Вы поднимаете соединение?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

1.соединение должно восстанавливаться при отсутствии пинга, т.е. не всё время,а когда поднят интерфейс ppp0
2.соединение поднимаю командой pppd call life
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

ну тогда можно примерно так

Код: Выделить всё

#!/bin/bash
# демонизация скрипта с помощью перезапуска его копии
if [ "x$1" != "x--" ]; then $0 -- 1> /dev/null 2> /dev/null &; exit 0; fi
# основная часть
# sllep 10 - чтобы дать pppd время на остановку. надеюсь, 10 секунд хватит. если нет, можно увеличить.
while :; do ping -c 3 ya.ru &>/dev/null || (killall pppd; sleep 10; pppd updetach call life); sleep 30; done
запускать, естественно, от root-а. для разрыва соединения сначала убить этот скрипт (pkill -f <название скрипта>), а затем уже pppd.
хотя. поймать сигнал TERM внутри скрипта и перед завершением скрипта убивать pppd труда не составляет. это как домашнее задание (:
p.s. надеюсь, что излишне подсказывать, что pppd этот скрипт после своего запуска стартанет сам?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

sash-kan писал(а):
14.04.2007 14:07
ну тогда можно примерно так

Код: Выделить всё

#!/bin/bash
# демонизация скрипта с помощью перезапуска его копии
if [ "x$1" != "x--" ]; then $0 -- 1> /dev/null 2> /dev/null &; exit 0; fi
# основная часть
# sllep 10 - чтобы дать pppd время на остановку. надеюсь, 10 секунд хватит. если нет, можно увеличить.
while :; do ping -c 3 ya.ru &>/dev/null || (killall pppd; sleep 10; pppd updetach call life); sleep 30; done
запускать, естественно, от root-а. для разрыва соединения сначала убить этот скрипт (pkill -f <название скрипта>), а затем уже pppd.
хотя. поймать сигнал TERM внутри скрипта и перед завершением скрипта убивать pppd труда не составляет. это как домашнее задание (:
p.s. надеюсь, что излишне подсказывать, что pppd этот скрипт после своего запуска стартанет сам?

тогда еще несколько вопросов
1этот скрипт кидать в любое место?
2как запускать?
если я правильно понял-запускаем этот скрипт и при отсутствии интерфейса ppp0 он поднимается, и продолжает работать пинг ya.ru?
при отсутствии пинга killall pppd.я правильно понял?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

foxIG писал(а):
14.04.2007 14:40
этот скрипт кидать в любое место?
да
foxIG писал(а):
14.04.2007 14:40
как запускать?
# /путь/к/скрипту/название-скрипта
а если он будет в каком-либо из каталогов из $PATH, то просто
# название-скрипта
foxIG писал(а):
14.04.2007 14:40
продолжает работать пинг ya.ru
ping посылает 3 (на всякий случай) пакета и завершается. в зависимости от результата его работы либо выполняется часть в скобочках, либо нет. потом sleep 30 и повтор цикла.
p.s. man bash && man ping
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

а можно его сделать #!/bin/sh и запускать как sh <скрипт> ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

foxIG писал(а):
14.04.2007 14:51
а можно его сделать #!/bin/sh
можно. а зачем?
foxIG писал(а):
14.04.2007 14:51
запускать как sh <скрипт> ?
можно. а зачем? обычно файлам со скриптами присвают флаг «исполняемый» (man chmod) и запускают их, указывая путь, или, если скрипт лежит в одном из каталогов, перечисленных в $PATH, просто по имени.

кстати, Вы так и не дали прямого ответа на прямой вопрос - «соединение должно быть постоянным (пока включен компьютер) или подниматься по требованию?»
исходя из этого:
foxIG писал(а):
14.04.2007 13:27
1.соединение должно восстанавливаться при отсутствии пинга, т.е. не всё время,а когда поднят интерфейс ppp0
2.соединение поднимаю командой pppd call life
я рискнул предположить, что «по требованию».
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

Да, по требованию
Спасибо сказали:
foxIG
Сообщения: 261
ОС: Mandriva 2010 PP

Re: скрипт для пинга

Сообщение foxIG »

огромное спасибо за скрипт
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: скрипт для пинга

Сообщение sash-kan »

пожалуйста. доработаете, чтобы перехватывал SIGTERM и убивал перед выходом pppd - выкладывайте. кому-то, может быть, пригодится.

но я бы рекомендовал все-таки разобраться с lcp. тогда можно будет воспользоваться и persist и maxfail 0. а не городить огород со «скриптами»
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: