如何从控制器执行shell命令

时间:2017-04-12 10:25:25

标签: shell cakephp cakephp-3.x

我正在开发CakePHP项目。

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

现在我已将所有任务移到shell中,每次用户单击按钮时,都会使用此功能从控制器创建新作业

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

这很好用。但是为了执行任务,我需要从终端

运行命令
bin/cake queue runworker

项目实时部署时无法实现。那么,如何在创建作业后立即从控制器内执行此命令?

1 个答案:

答案 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分钟并提高寿命,你会得到相当多的重叠工人,从而获得更多的“并行”处理能力。玩弄它,但不要射击顶部。

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