12

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

4

4 回答 4

24

使用外壳

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

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

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

文档中介绍了创建 shell并将它们与 cron 一起使用。

于 2012-12-19T16:32:08.060 回答
1

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

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

于 2013-09-27T06:13:49.070 回答
0

这可以通过以下步骤轻松完成 -

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 中调用控制器的操作,只需导入该特定控制器,让我们说 AppController 通过App::uses('AppController', 'Controller');

现在在 Shell 中创建对象 AppController

$object =new AppController();
$object->func_in_controller();

现在可以在 Shell 中通过以下方式访问函数的参数$object->func_param;

谢谢!

于 2017-10-05T09:20:32.550 回答
-1

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

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

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

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

您可以在此处查看如何使用cronfor unix 。

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

您在CakePHP 文档中有更多关于如何从 cron 作业调用 Cake Shell 的信息。

于 2012-12-19T09:57:47.377 回答