使用CakePHP排队shell

时间:2014-04-30 05:49:22

标签: php shell cakephp queue

我正在使用CakePHP 2.3.8而我正在使用CakePHP Queue Plugin

我将数据插入队列以供shell处理。我可以处理队列(运行shell),并且它可以正常运行。但是,当我处理队列时,页面会挂起,直到队列完成处理。队列可能需要一段时间才能处理,因为它会产生外部请求,如果有故障,我会有一些重试和等待时间。基本上,我需要找到一种在后台处理队列的方法,这样用户就不必等待它。

这是我现在的代码

App::uses('Queue', 'Queue.Lib');

//queue up the items!
foreach($queue_items as $item){

    $task_id = Queue::add("ExternalSource ".$item, 'shell');
    $this->ExternalSource->id = $item;
    $this->ExternalSource->saveField('queue_task_id', $task_id['QueueTask']['id']);

}

//now process the queue 
Queue::process(); 
echo "Done!";

我也试过直接调用shell,但同样的事情发生了。我必须等到它完成处理。

有没有办法调用shell,以便用户不必等待它完成处理?我不想经常检查cronjob。

修改

我也尝试过使用exec,但似乎没有工作

$exec = exec('/Applications/XAMPP/xamppfiles/htdocs/app/Console/cake InitiateQueueProcess');
var_dump($exec);

转储显示string '' (length=0)。当我将exec更改为exec('pwd');时,它会显示该目录。我可以使用那个确切的路径并从终端调用shell,所以我知道它是正确的。我也改变了许可,但仍然没有任何反应。外壳无法运行。

0 个答案:

没有答案