如何在 cakephp 中使用 cron 作业在 Ubuntu 上调用控制器的操作,我正在尝试通过 crontab 执行此操作,但它不起作用?
4 回答
使用外壳
在 cron 作业中使用 CakePHP 应用程序的“蛋糕方式”是创建 shell,然后将其作为 cron 作业调用。
即创建一个shell来执行任务,然后将其添加到crontab(crontab -e
在linux机器上):
0 * * * * cd /path/to/app/ && Console/cake your_shell_name params
文档中介绍了创建 shell并将它们与 cron 一起使用。
由于我们不需要 MVC 的 View 层,我也建议使用 Cake shell 而不是在普通控制器中编写它。这也将减少诸如 beforeFilter、beforeRender 等控制器的各种回调函数的内存负载。
然后在 **nix cron 选项卡中为您的 CakeShell 中编写的 cron 输入一个条目。
这可以通过以下步骤轻松完成 -
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;
谢谢!
您可以创建一个直接调用 URL 的 cron 作业:
php -f http://yoursite.com/yourController/yourAction/params > /dev/null
或者你也可以使用相对路径:
php -f CakePHP/yourController/yourAction/params > /dev/null
您可以在此处查看如何使用cron
for unix 。
无论如何,如果该操作只能从 cron 作业中使用,而不是通过 URL 提供给任何其他用户,我建议您使用 CakePHP Shell。
您在CakePHP 文档中有更多关于如何从 cron 作业调用 Cake Shell 的信息。