The OpenNET Project / Index page

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

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

"Вызов скрипта expect из php"  +/
Сообщение от fa email(??) on 11-Ноя-11, 14:59 
Всем привет

Есть скрипт expect для общения с одной редкой железякой по telnet. Есть админка на php, которая исполняет этот скрипт.

В скрипте expect есть такая команда:
stty rows 1000

Она указывает скрипту, что у него в терминале - 1000 строк.

Если я вызываю скрипт из консоли, все работает. Если вызываю через web, эта строчка не работает. Кто-нибудь может подсказать, почему?

Ответить | Правка | Cообщить модератору

Оглавление

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


1. "Вызов скрипта expect из php"  +/
Сообщение от sproot (ok) on 11-Ноя-11, 15:35 
привет

Как обнаружено что именно эта строчка не работает? Какое значение имеет переменная TERM в обоих случаях? Под каким пользователем выполняется php? Из терминала под этим же пользователем запускаете expect скрипт или под другим?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Вызов скрипта expect из php"  +/
Сообщение от fa email(??) on 12-Ноя-11, 17:04 
Спасибо, что откликнулись

> Как обнаружено что именно эта строчка не работает?

Когда запускаю скрипт в консоли, железяка отдает 1000 строк (ну или столько, сколько укажу в stty rows). Если вызываю из админки - отдает только 15.

>Какое значение имеет переменная  TERM в обоих случаях?

TERM в обоих случаях пустой.

> Под каким пользователем выполняется php?

php - apache. expect скрипт выполняется из под root (через sudo)

>Из терминала под этим же пользователем запускаете expect скрипт или под другим?

Пробовал и под apache, и под root. В консоли в обоих случаях скрипт работает (железяка отдает 1000 строк).


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Вызов скрипта expect из php"  +/
Сообщение от fa email(ok) on 12-Ноя-11, 17:18 
Ooops... Ошибка. Через sudo ничего не выполняется. Все выполняется из под apache.

На всякий случай вот примерное содержание скриптов:
script.php:
<?php echo shell_exec("/path/to/expect_scipt.exp"); ?>

expect_scipt.exp:
#!/usr/bin/expect

stty rows 1000
spawn telnet 10.0.0.1
expect "login:"
send "admin\n"
expect "assword:"
send "admin\n"
expect ">"
send "en\n"
expect "assword:"
send "admin\n"
expect "#"
send "show cable modem\n"
expect "#"
exit


Что делаю для проверки:
#su apache
$php script.php
отдает 1000 строчек

открываю script.php в браузере - отдает 15 строчек.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Вызов скрипта expect из php"  +/
Сообщение от sproot (ok) on 13-Ноя-11, 15:06 
Что в логах ошибок апача? Покажите readlink /proc/self/fd/0 из под "su - apache" и из <?php echo shell_exec("readlink /proc/self/fd/0"); ?>

Пробовали вызывать stty rows 1000 _после_ spawn telnet 10.0.0.1?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Вызов скрипта expect из php"  +/
Сообщение от fa email(ok) on 14-Ноя-11, 18:31 
> Что в логах ошибок апача?

пусто

>Покажите readlink /proc/self/fd/0 из под "su - apache" и из <?php echo shell_exec("readlink /proc/self/fd/0"); ?>

Тут вывод различается:
Команда readlink из под apache (да или просто если shell_exec("readlink.. запускаю в консоли) выдает /dev/pts/0
Когда открываю php-скрипт в браузере - выдает /dev/null

> Пробовали вызывать stty rows 1000 _после_ spawn telnet 10.0.0.1?

пробовал. результат тот же (железка отдает только 15 строчек).

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "Вызов скрипта expect из php"  +/
Сообщение от sproot (ok) on 14-Ноя-11, 06:01 
Попробуйте:

trap {
    stty rows 1000 < $spawn_out(slave, name)
}WINCH

после
spawn telnet 10.0.0.1

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Вызов скрипта expect из php"  +/
Сообщение от fa email(ok) on 14-Ноя-11, 18:39 
> Попробуйте:
> trap {
>     stty rows 1000 < $spawn_out(slave, name)
> }WINCH
> после
> spawn telnet 10.0.0.1

Пробую. Все равно отдает 15 строчек.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Вызов скрипта expect из php"  +/
Сообщение от sproot (ok) on 15-Ноя-11, 01:28 
>> Попробуйте:
>> trap {
>>     stty rows 1000 < $spawn_out(slave, name)
>> }WINCH
>> после
>> spawn telnet 10.0.0.1
> Пробую. Все равно отдает 15 строчек.

А, так: stty rows 1000 < $spawn_out(slave, name) ?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Вызов скрипта expect из php"  +/
Сообщение от fa email(ok) on 16-Ноя-11, 02:53 
>>> Попробуйте:
>>> trap {
>>>     stty rows 1000 < $spawn_out(slave, name)
>>> }WINCH
>>> после
>>> spawn telnet 10.0.0.1
>> Пробую. Все равно отдает 15 строчек.
> А, так: stty rows 1000 < $spawn_out(slave, name) ?

И так тоже не работает (в общем я уже испробовал кучу вариаций. все, что в гугле смог найти по поводу... ниче не помогает) :-(

В общем-то все решилось несколько иным способом. Оказалось, что в железяке (CMTS casa systems) есть аналог cisco-вской команды "terminal length 0" - "page-off" (из-за такого непохожего на цисковский аналог названия я ее сразу и не заметил). В общем, команда отключает постраничный вывод последующих команд, что мне, в общем-то, и нужно.

Sproot, спасибо Вам огромное за столько убитого на меня и мой expect-скрипт (будь он неладен) времени.


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Вызов скрипта expect из php"  +/
Сообщение от sproot (ok) on 16-Ноя-11, 14:01 
>[оверквотинг удален]
> И так тоже не работает (в общем я уже испробовал кучу вариаций.
> все, что в гугле смог найти по поводу... ниче не помогает)
> :-(
> В общем-то все решилось несколько иным способом. Оказалось, что в железяке (CMTS
> casa systems) есть аналог cisco-вской команды "terminal length 0" - "page-off"
> (из-за такого непохожего на цисковский аналог названия я ее сразу и
> не заметил). В общем, команда отключает постраничный вывод последующих команд, что
> мне, в общем-то, и нужно.
> Sproot, спасибо Вам огромное за столько убитого на меня и мой expect-скрипт
> (будь он неладен) времени.

Хорошо, что хоть так все разрешилось :) Просто, было интересно ;)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Вызов скрипта expect из php"  +/
Сообщение от rebrovsv (ok) on 28-Май-12, 18:51 
>[оверквотинг удален]
> И так тоже не работает (в общем я уже испробовал кучу вариаций.
> все, что в гугле смог найти по поводу... ниче не помогает)
> :-(
> В общем-то все решилось несколько иным способом. Оказалось, что в железяке (CMTS
> casa systems) есть аналог cisco-вской команды "terminal length 0" - "page-off"
> (из-за такого непохожего на цисковский аналог названия я ее сразу и
> не заметил). В общем, команда отключает постраничный вывод последующих команд, что
> мне, в общем-то, и нужно.
> Sproot, спасибо Вам огромное за столько убитого на меня и мой expect-скрипт
> (будь он неладен) времени.

быть может кому-то будет полезно
возникла похожая проблема
нужно было через веб-браузер вызывать исполнение expect скрипта, который бы собирал на маршрутизаторе дамп и забирал его на веб-сервер для дальнейшей обработки
при запуске php скрипта через консоль все обрабатывалось отлично. При вызове через веб - болты, nginx не дожидался ответа от php (апач, пхп-мод) и давал отбой по таймауту
Пол дня ломал голову, перерыл все мыслимые-немыслимые конфиги
все оказалось на поверхности:
в консоли скрипт запускал из под рута, и конектился спокойно по ssh - все работает.
при вызове же через веб, процесс запускался от имени апача, и требовалось принять публичный ключ от устройства. Это мой скрипт не обрабатывал и загибался в состоянии ожидания предложения ввести пароль. А устройство ожидало, пока апач примет ключ.
Для решения либо 1 раз нужно было законектится из под apache по ssh к устройству, что бы apache созранил у себя ключик и далее подключался уже без вопросов.

Ниже мой скрипт:
#!/usr/bin/expect -f

spawn ssh admin@***.***.***.***

#ниже команды, что бы принять ключ, 1 раз выполнил потом закоментил
#expect "Are you sure you want to continue connecting (yes/no)?"
#send "yes\r"

#просим устройство(microtic routerBoard) собрать дамп
expect "admin@***.***.***.***'s password:"
send "*******\r"
expect login
expect eof
send "tool torch src-address=0.0.0.0/0 dst-address=0.0.0.0/0 \"ether4\"\r"
expect eof
send "D"
sleep 1
send "Q"
expect eof
send "quit\r"
expect eof
# забираем дамп с устройства на веб сервер
spawn ftp ***.***.***.***
expect "Name (***.***.***.***:***):"
send "adminftp\r"
expect "Password:"
send "*******\r"
expect "ftp>"
send "get dump.txt /var/www/dump.txt\r"
expect "ftp>"
send "quit\r"

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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