Я создаю задачу оболочки с CakePHP 2.x, и я хочу выполнить ее через контроллер. Итак, я создаю функцию, которая выполняет команду cli для запуска задачи оболочки. Вот мои файлы:Ошибка 127 с командой торта
// I want to launch it in background task
$pid = exec(APP . 'Console/cake {myCommand} {myTask} {argument} >/dev/null 2>&1 & echo $!', $output, $return_var);
debug($pid);
debug($output);
debug($return_var);
Оказывает:
// line xx
''
// line xx
array()
// line xx
(int) 127
Я попытался запустить только команду cake
так:
$pid = exec(APP . 'Console/cake', $output, $return_var);
И я получить тот же результат. Кажется, оболочка не находит полный путь, но это странно, потому что это правильный путь. Я тестировал его на своей машине в разработке, он отлично работает.
Есть ли у вас какие-либо идеи из этого?
Благодаря
Почему вы вызываете задачу оболочки Cake с контроллера? Это звучит совершенно неправильно. Если используется общий код, используемый как в браузере, так и в командной строке, то эта функциональность лучше помещается в модель, которая может быть вызвана как задачей, так и контроллером. – drmonkeyninja
Поскольку мы хотим запустить этот сценарий оболочки из URL-адреса в браузере. Это многолетняя фоновая задача, и мы не хотим «блокировать» пользователя во время этого процесса. –
Может ли это не быть автоматизированным с помощью cronjob? 'exec()' действительно следует избегать. Если вам нужно активировать его из браузера, возможно, вам стоит использовать что-то вроде плагина Queue (https://github.com/dereuromark/cakephp-queue) для запуска задачи. – drmonkeyninja