我正在开发CakePHP项目。
我有一些任务要在后台执行,这可能需要很长时间才能完成。因此我使用了 cakephp-queue 插件(感谢dev )。
现在我已将所有任务移到shell中,每次用户单击按钮时,都会使用此功能从控制器创建新作业
$job = $this->QueuedJobs->createJob('Scan', [
'server_id' => $id,
'user' => $this->Auth->user('id'),
]);
这很好用。但是为了执行任务,我需要从终端
运行命令bin/cake queue runworker
项目实时部署时无法实现。那么,如何在创建作业后立即从控制器内执行此命令?
答案 0 :(得分:2)
您还没有理解任务的工作原理。重点是不让控制器等待某些东西,也无法从Web上下文运行shell。
再次阅读文档:https://github.com/dereuromark/cakephp-queue/tree/master/docs#setting-up-the-trigger-cronjob你应该创建一个cron作业。
* / 10 * * * * cd / full / path / to / app&& bin / cake queue runworker -q
请确保使用crontab -e -u www-data将其设置为www-data用户,而不是root等。
这将每10分钟启动一名新员工。如果将工作人员的最长生命时间配置为15分钟,则会有两个工作人员同时运行的小重叠。如果你降低10分钟并提高寿命,你会得到相当多的重叠工人,从而获得更多的“并行”处理能力。玩弄它,但不要射击顶部。
它将接收任务并更新任务的状态。