我正在使用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,所以我知道它是正确的。我也改变了许可,但仍然没有任何反应。外壳无法运行。