LINUX.ORG.RU
ФорумAdmin

Помогите с скриптом дозвона


0

0

Есть следующий скрипт

#!/bin/bash

ATTEMPT=0

while : ; do
ATTEMPT=`expr $ATTEMPT + 1`
echo "Попытка : $ATTEMPT"
pppd /dev/modem -detach 115200 connect "chat \
ECHO ON \
ABORT 'BUSY' \
ABORT 'NO CARRIER' \
ABORT 'NO DIALTONE' \
'' ATZ \
OK ATDS \
CONNECT '' \
ogin: xxxxxxxx \
ssword: xxxxxxxx \

EXIT=$?
if [ $EXIT = 5 ]; then
exit
fi
done

От него требуется завершаться по нажатию ctrl-c. Когда chat завершает свою работу и pppd непосредственно преступает к поднятию ppp на линии, сигнал SIGTERM можно установить по коду выхода 5. Здесь проблем нет.
Проблема в chat. Она вызывается pppd и я не могу найти способа определить код выхода. Есть ещё у pppd код выхода 8 (connect script failied), но это не выход, т.к. по сигналам модема BUSY и т.п. нужен перезвон.
Внимание, вопрос :-)
1) Можно ли отловить код выхода chat ?
2) Если нет, то есть ли какие-то другие способы реализации требуемого ?

anonymous

в принципе, можно в скрипт для чат вставить REPORT и потом проверять файл на предмет чего же произошло. Хотя это криво :)

WerNA ★★★★★
()

> есть ли какие-то другие способы реализации требуемого ?

Можно использовать опцию persist у pppd и запускать его демоном, тогда он сам будет перезванивать. Кроме того, есть скриптики (у меня pon, poff, в Slackware, насколько помню, они назывались ppp-on, ppp-off) для соединения/рассоединения. Если очень хочется завершать по Ctrl-C, можно написать bash-скрипт, который будет сидеть и ловить Ctrl-C, а поймав, вызывать poff.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от anonymous

> Но в идеале хочется, чтоб всё единым скриптом...

Если тебе не нравится, что будет несколько файлов скриптов, то можешь их (скрипты) склеить и использовать параметры ком. строки для выбора поведения.

watashiwa_daredeska ★★★★
()

В итоге я пришёл к такому решению

#!/bin/sh

ATTEMPT=0

while : ; do
rm -f /tmp/dial-tmp
ATTEMPT=`expr $ATTEMPT + 1`
echo "Попытка : $ATTEMPT"
pppd /dev/modem -detach 115200 connect "chat -r /tmp/dial-tmp \
        ECHO ON                         \
        ABORT   'BUSY'                  \
        ABORT   'NO CARRIER'            \
        ABORT   'NO DIALTONE'           \
	REPORT	'BUSY'			\
	REPORT	'NO CARRIER'		\
	REPORT	'NO DIALTONE'		\
        ''              ATZ             \
        OK              ATDS		\
        CONNECT         ''              \
        ogin:           xxxxxxxx        \
        ssword:         xxxxxxxx"
        
EXIT=$?
if [ $EXIT = 5 ]; then
 exit
elif [ $EXIT = 8 ]; then
 if [ ! -s /tmp/dial-tmp ]; then
  exit
 fi
fi
sleep 1.4
done 

И это всё, кажется, ещё и работает ;-)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.