【问题标题】:How to setup cronjobs in cake php?如何在 cakephp 中设置 cron 作业?
【发布时间】:2012-12-19 09:48:13
【问题描述】:

如何在 cakephp 中使用 cron 作业在 Ubuntu 上调用控制器的操作, 我正在尝试通过 crontab 执行此操作,但它不起作用?

【问题讨论】:

  • 你能显示你添加到crontab的命令吗..

标签: cakephp


【解决方案1】:

使用外壳

在 cron 作业中使用 CakePHP 应用程序的“蛋糕方式”是创建 shell,然后将其作为 cron 作业调用。

即创建一个 shell 来执行任务,然后将其添加到 crontab(Linux 机器上为crontab -e):

0 * * * *       cd /path/to/app/ && Console/cake your_shell_name params

Creating shells 和 using them with cron 包含在文档中。

【讨论】:

  • 声誉分数显然与答案质量无关。这是正确的做事方式。
  • 从2.x开始推荐使用cd /path/to/app/ && Console/cake your_shell_name params
【解决方案2】:

由于我们不需要 MVC 的 View 层,我也建议使用 Cake shell 而不是在普通控制器中编写它。这也将减少诸如 beforeFilter、beforeRender 等控制器的各种回调函数的内存负载。

然后在 **nix cron 选项卡中为您的 CakeShell 中编写的 cron 输入一个条目。

【讨论】:

    【解决方案3】:

    这可以通过以下步骤非常容易地完成 - :

    1) 在控制台/命令中创建一个 shell,比如说 HelloShell.php

     <?php
        class HelloShell extends AppShell
        {
        public function main()
        {
        //Your functionality here...
        }
    
        }
    
        ?>
    

    这个shell可以被Console/cake hello调用

    2) 编写命令crontab-e 。这将打开默认编辑器或您选择的编辑器 现在我们希望我们的 shell 在每 5 分钟后运行一次:-

      */5 * * * * /PATH TO APP/Console/cake hello
    

    为了更好地理解,请参阅https://www.youtube.com/watch?v=ljgvo2jM234

    3) 如果您想在 Shell 中调用 Controller 的操作,只需导入特定的控制器,比如说 AppController by App::uses('AppController', 'Controller');

    现在通过

    在Shell中创建对象AppController
    $object =new AppController();
    $object->func_in_controller();
    

    现在$object-&gt;func_param;可以在Shell中访问函数的参数

    谢谢!

    【讨论】:

      【解决方案4】:

      您可以创建一个直接调用 URL 的 cron 作业:

      php -f http://yoursite.com/yourController/yourAction/params > /dev/null
      

      或者你也可以使用相对路径:

      php -f CakePHP/yourController/yourAction/params > /dev/null
      

      你可以看看如何使用cron for unix here。

      无论如何,如果该操作只能从 cron 作业中使用,而不是通过 URL 提供给任何其他用户,我建议您使用 CakePHP Shell。

      您可以在CakePHP documentation 中了解有关如何从 cron 作业调用 Cake Shell 的更多信息。

      【讨论】:

      • 为什么要在蛋糕中给出两种“跑壳”的糟糕方法,然后以实际正确的方法作为旁注?
      • 好吧。我不完全记得如何在 Linux 上执行此操作,因为我通常在 Windows 上工作。无论如何,我发布了如何做到这一点的链接,我建议他在前两种方法上使用 shell。
      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2012-04-20
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多