2015-10-21 2 views
0

Я создаю задачу оболочки с 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); 

И я получить тот же результат. Кажется, оболочка не находит полный путь, но это странно, потому что это правильный путь. Я тестировал его на своей машине в разработке, он отлично работает.

Есть ли у вас какие-либо идеи из этого?

Благодаря

+1

Почему вы вызываете задачу оболочки Cake с контроллера? Это звучит совершенно неправильно. Если используется общий код, используемый как в браузере, так и в командной строке, то эта функциональность лучше помещается в модель, которая может быть вызвана как задачей, так и контроллером. – drmonkeyninja

+0

Поскольку мы хотим запустить этот сценарий оболочки из URL-адреса в браузере. Это многолетняя фоновая задача, и мы не хотим «блокировать» пользователя во время этого процесса. –

+0

Может ли это не быть автоматизированным с помощью cronjob? 'exec()' действительно следует избегать. Если вам нужно активировать его из браузера, возможно, вам стоит использовать что-то вроде плагина Queue (https://github.com/dereuromark/cakephp-queue) для запуска задачи. – drmonkeyninja

ответ

0

172 является на самом деле это означает, что вы выяснили, см http://tldp.org/LDP/abs/html/exitcodes.html

, но это странно, потому что это правильный путь

Честно говоря, я сомневаюсь, что система лежит , Поэтому проверьте путь на целевом компьютере и не только в среде вашего разработчика.

Также проверьте, разрешен ли пользователь, выполняющий скрипт. Разрешения Linux могут быть забавными. Вы можете попытаться установить 777 для файла cake и убедиться, что он также является исполняемым.

+0

Извините, мой ответ немного запоздал, но я тестировал ваши предложения. Наконец, я не выполняю свою задачу с контроллером, но с заданием cron, установленным на моем сервере. Я работаю с плагином CakePHP-Queue для добавления новых задач из своего контроллера. Но для ошибки 127 я обнаружил ошибки выполнения, заменив 'exec' на' proc_open'. Файл 'Console/cake' выполняет команды типа' dirname', 'basename', ... но не с полным путем (например:'/usr/bin/dirname'), и, я думаю, это проблема. –

Смежные вопросы