如何在cakephp中使用cron job在Ubuntu上调用控制器的动作, 我试图通过crontab来做但它不起作用?
答案 0 :(得分:22)
在cron作业中使用CakePHP应用程序的'Cake Way'将创建shell,然后将其称为cron作业。
即。创建一个shell来完成任务,然后将其添加到crontab(linux机器上的crontab -e
):
0 * * * * cd /path/to/app/ && Console/cake your_shell_name params
答案 1 :(得分:1)
由于我们不需要MVC的View层,我还建议使用Cake shell而不是在普通控制器中编写它。这也将减少控制器的各种回调函数的内存负载,如beforeFilter,beforeRender等。
然后在** nix cron选项卡中输入用于在CakeShells中编写的crons的条目。
答案 2 :(得分:0)
这可以通过以下步骤轻松完成 - :
1)创建一个shell,让我们在Console / Command
中说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的动作,只需导入那个特定的控制器,让我们说{App} App::uses('AppController', 'Controller');
现在通过
在Shell中创建对象AppController$object =new AppController();
$object->func_in_controller();
现在可以通过$object->func_param;
谢谢!
答案 3 :(得分:-1)
您可以创建直接调用URL的cron作业:
php -f http://yoursite.com/yourController/yourAction/params > /dev/null
或者您也可以使用相对路径来执行此操作:
php -f CakePHP/yourController/yourAction/params > /dev/null
您可以查看如何将cron
用于unix here。
无论如何,我建议您使用CakePHP Shell,如果该操作只能从cron作业获得,而不是通过URL提供给任何其他用户。
您有关于如何从CakePHP documentation中的cron作业调用Cake Shell的更多信息。