The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Вызвать в одном скрипте wget и telnet"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 17-Янв-10, 05:01 
И снова здравствуйте!
Имеется два адсл-модема:
один перезагружается командой wget ip_addr_adsl_modem/reboot.cgi
второй - командой telnet ip_addr_adsl_modem ...
Задача: написать один скрипт перезагрузки обоих модемов.
Задача тривиальная и по отдельности для каждого модема решается просто:

script_1.sh
#!/bin/sh
wget 192.168.1.1/reboot.cgi

script_2.sh
#!/usr/bin/expect
spawn telnet 192.168.1.2
expect "Password:"
send "Blah-Blah-Blah\r"
expect "ADSL>"
send "wan adsl reset\r"

Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить их нельзя.
Пробовал в один скрипт вставить другой командой exec:

script_1.sh
#!/bin/sh
wget 192.168.1.1/reboot.cgi
exec ./script_2.sh
#another code here

Так все работает за исключением того, что управление из второго скрипта возвращается командной строке, а не первому скрипту, а нам необходимо вернуться в первый скрипт!

Какие будут предложения?

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от Vladin (ok) on 17-Янв-10, 07:34 
Написать

./script_2.sh

вместо

exec ./script_2.sh

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 17-Янв-10, 12:44 
>Написать
>
>./script_2.sh
>
>вместо
>
>exec ./script_2.sh

Не выходит из второго скрипта

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от Michael (??) on 17-Янв-10, 13:30 
>>Написать
>>
>>./script_2.sh
>>
>>вместо
>>
>>exec ./script_2.sh
>
>Не выходит из второго скрипта

daemon script_2.sh?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от anonymous (??) on 17-Янв-10, 17:46 
>Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить
>их нельзя.

можно.

expect <<__EOF
тут команды
__EOF

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 17-Янв-10, 19:03 
>>Опытный админ сразу заметит, что заголовки скриптов несовместимы, т. е. просто объединить
>>их нельзя.
>
>можно.
>
>expect <<__EOF
>тут команды
>__EOF

А как быть с командой
spawn telnet ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от anonymous (??) on 17-Янв-10, 19:13 
>[оверквотинг удален]
>>>их нельзя.
>>
>>можно.
>>
>>expect <<__EOF
>>тут команды
>>__EOF
>
>А как быть с командой
>spawn telnet ?

в данном случае expect -- это название бинарника.  итого получаем:

expect <<__EOF
spawn telnet 192.168.1.2
expect "Password:"
send "Blah-Blah-Blah\r"
expect "ADSL>"
send "wan adsl reset\r"
__EOF

вся конструкция называется 'here document'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 17-Янв-10, 19:40 
>[оверквотинг удален]
>
>в данном случае expect -- это название бинарника.  итого получаем:
>
>expect <<__EOF
>spawn telnet 192.168.1.2
>expect "Password:"
>send "Blah-Blah-Blah\r"
>expect "ADSL>"
>send "wan adsl reset\r"
>__EOF

Спасибо - завтра попробую
>
>вся конструкция называется 'here document'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 18-Янв-10, 18:05 
Сейчас весь скрипт выглядит следующим образом:

#!/bin/bash

COUNT = 2
SRV = 2ip.ru
ADSL1 = eth1
ADSL2 = eth2
IP_ADSL1 = 192.168.1.1

ping -c $COUNT -I $ADSL1 $SRV > /dev/null
if [ $? -ne 0 ]; then
echo 'BAD'
        wget -q --user='user' --password='password' http://$IP_DSL1/rebootinfo.cgi
        rm -f rebootinfo.cgi
else
        echo "1 - OK"
fi

ping -c $COUNT -I $ADSL2 $SRV > /dev/null
if [ $? -ne 0 ]; then
echo 'BAD'
        ./tel2
else
        echo "2 - OK"
fi


./tel2

#!/bin/bash

expect <<eof
log_user 1
set timeout 3
spawn telnet 192.168.2.1
expect "Password:"
send -- "password\r"
expect "ADSL>"
send "wan adsl reset\r"
send "exit\r"
expect eof

sleep 120
done
exit 0

Все работает. Спасибо за помощь

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от boykov (ok) on 18-Янв-10, 18:32 
>Сейчас весь скрипт выглядит следующим образом:
>
>#!/bin/bash
>

.......................
>
>./tel2
>
>#!/bin/bash
>
>expect <<eof
>
>Все работает. Спасибо за помощь

и, наконец, можно избавиться от первоначальной проблемы -- разделения файлов :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Вызвать в одном скрипте wget и telnet"  +/
Сообщение от handler2006 email(ok) on 18-Янв-10, 18:43 
так точно
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру