【发布时间】:2012-12-19 09:48:13
【问题描述】:
如何在 cakephp 中使用 cron 作业在 Ubuntu 上调用控制器的操作, 我正在尝试通过 crontab 执行此操作,但它不起作用?
【问题讨论】:
-
你能显示你添加到crontab的命令吗..
标签: cakephp
如何在 cakephp 中使用 cron 作业在 Ubuntu 上调用控制器的操作, 我正在尝试通过 crontab 执行此操作,但它不起作用?
【问题讨论】:
标签: cakephp
在 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 包含在文档中。
【讨论】:
cd /path/to/app/ && Console/cake your_shell_name params
由于我们不需要 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 中调用 Controller 的操作,只需导入特定的控制器,比如说 AppController by App::uses('AppController', 'Controller');
现在通过
在Shell中创建对象AppController$object =new AppController();
$object->func_in_controller();
现在$object->func_param;可以在Shell中访问函数的参数
谢谢!
【讨论】:
您可以创建一个直接调用 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 的更多信息。
【讨论】: