【问题标题】:How to execute shell command from controller如何从控制器执行shell命令
【发布时间】:2017-04-12 18:58:53
【问题描述】:

我正在做 CakePHP 项目。

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

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

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

这工作正常。但是为了执行任务,我需要从终端运行命令

bin/cake queue runworker

当项目已上线并已部署时,这是不可能的。那么,如何在创建作业后从控制器中执行此命令?

【问题讨论】:

    标签: shell cakephp cakephp-3.x


    【解决方案1】:

    你还没有理解任务是如何工作的。重点是让控制器等待某些东西,也不要从 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 分钟并提高生命周期,你会得到很多重叠的工作人员,从而获得更多的“并行”处理能力。玩弄它,但不要在顶部射击。

    它将拾取任务并更新任务的状态。

    【讨论】:

    • 谢谢。我多次阅读文档,但无法准确理解。我之前从未使用过 cron 作业。现在我清楚了。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多