Задать вопрос
@Alline

Почему bash-скрипт, вызываемый из php, отрабатывает не полностью?

Здравствуйте. Пытаюсь сверлить зубы через тот самый проход. Не сверлится, нужна помощь.

Есть код php, который дергает bash скрипт на удаленном сервере. Пых:
$connection = ssh2_connect(xxx, 22);   //коннектится
if (!ssh2_auth_password($connection, 'root', 'xxx')) {
    die('Не прошла аутентификация');
}
ssh2_scp_send($connection, '/path/file.sql', '/path/file.sql');  //заливает туда заранее подготовленный sql файл
$stream = ssh2_exec($connection, '/path/runner.sh');   //дергает скрипт
(код упрощен, чтобы сюда портянку не тянуть)

Скрипт runner.sh. Он должен в свою очередь подрубиться по ssh к третьему серваку и выполнить там sql.
#!/bin/bash
ip='x.x.x.x'
user='root'
whoami 
ssh -t $user@$ip  ls  # Для отладки. Эта команда отрабатывает нормально
ssh -t $user@$ip  mysql < file.sql  # А вот тут затык
echo "end"  # это тоже выводится нормально

Когда я выполняю ./runner.sh просто из консоли на удаленном сервере, выплевыет в консоль ошибку tput: No value for $TERM and no -T specified. Но sql в базу попадает. Когда дергаю его через php, не отрабатывает mysql < file.sql.

При этом ls выводит. Whoami в обоих случаях говорит, что юзер root. Права на fail.sql и runner.sh уже вообще поставила 777
Если вместо ssh $user@$ip mysql < file.sql ставлю ssh $user@$ip 'mysql -e "select * from table"', то все работает опять же. То есть аутентификацию в mysql проходит, дело не в этом.
Я знаю, что казалось бы проще скопировать file.sql на третий сервак и скармливать мускулю оттуда. Но там свой геморрой, не копируется)

Подскажите пожалуйста, в чем может быть дело, куда смотреть? Дело вот в этой ошибке tput: No value for $TERM and no -T specified ?
Или как хотя бы можно это нормально отдебажить? Я не так чтобы близка с башем
  • Вопрос задан
  • 288 просмотров
Подписаться 2 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 1
DollyPapper
@DollyPapper
Я с MySQL не работал, но предполагаю что он для вывода в терминал использует ncurses, и когда вы передаете ему данный файл, он пытается вывести что-то в консоль используя переменную $TERM. По умолчанию она равна xterm-256color. Залогиньтесь на своем сервере и проверьте, установлена ли она. Если нет пропишите в .bashrc своего пользователя под которым выполняете запрос
export TERM=xterm-256color
И попробуйте еще раз.
Как там работает из самого PHP сложно сказать. Возможно просто при вызове из терминала ошибка игнорируется, а PHP получает некий код ошибки и прекращает работу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы