kotcich
@kotcich
Я скучный.

Почему не работает команда в exec(), но работает, если просто ввести ее в консоли вручную?

mysql -u root < "/path/my-sql.sql", это код если я его ввожу вручную и он срабатывает.
Вот как я ее вызываю в exec:
exec("cd /path && mysql -u root < \"/path/my-sql.sql\"");
. Но, не работает, почему?
  • Вопрос задан
  • 377 просмотров
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если при выполнении exec() возникает ошибка, то она выводится в stderr.
Надо просто прочитать её, там будет написано, почему не работает.
В частности, чтобы получать весь вывод кроновских команд на почту, в том числе и ошибки, надо написать в начале крон файла MAILTO=свойемейл

Если есть проблемы с чтением stderr, то можно добавить перенаправление в stdout, записать его в переменную и дальше уже направлять по своему усмотрению
$out = exec('cd /path && mysql -u root < "/path/my-sql.sql" 2>&1');
log_error($out);
Ответ написан
Комментировать
@horodchukanton
Как вариант - разница в окружении (пользователь, переменная PATH)
Я бы рекомендовал для начала указать полный путь к mysql (/usr/bin/mysql)
Ответ написан
Ваш ответ на вопрос

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

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