2017-04-12 69 views
0

我正在开发CakePHP项目。如何从控制器执行shell命令

我有一些任务在后台执行,可能需要很长时间才能完成。所以我用cakephp-queue插件(感谢dev)。

现在我提出我的所有任务在外壳和每次用户点击一个按钮,一个新的作业从控制器使用此功能

$job = $this->QueuedJobs->createJob('Scan', [ 
    'server_id' => $id, 
    'user' => $this->Auth->user('id'), 
]); 

这是工作的罚款创建。但是为了执行任务,我需要从终端运行命令

bin/cake queue runworker 

当项目正式运行和部署时,这是不可能的。那么,如何在创建作业后从控制器内执行此命令?

回答

2

你还没有理解任务是如何工作的。整点是而不是有一个控制器等待的东西,也没有从web上下文运行一个shell。

再次阅读文档:https://github.com/dereuromark/cakephp-queue/tree/master/docs#setting-up-the-trigger-cronjob你应该创建一个cron工作。

*/10 * * * * CD /全/路径/到/应用& &斌/蛋糕队列runworker -q

确保您使用crontab -e -u www数据进行设置如www数据用户,而不是root等

这将启动一个新的工人每10分钟。如果将一名工人的最长使用时间设置为15分钟,那么两名工人同时工作时会产生小的重叠。如果您降低10分钟并延长使用寿命,您会获得不少重叠的工作人员,从而获得更“平行”的处理能力。玩它,但只是不要射过顶部。

它将接收任务并更新任务的状态。

+0

谢谢。我多次浏览文档,但无法完全确定。我以前从未使用cron作业。现在对我来说很清楚。再次感谢。 –