我试图在CakePHP 2.x应用程序中创建一个cron作业。但是我在网上阅读的所有资源似乎要么完全不同,要么几乎没有一致性,要么用非常复杂的术语解释它。
基本上我在MyShell.php
/app/Console/Command
<?php
class MyShell extends Shell {
public function sendEmail() {
App::uses('CakeEmail', 'Network/Email');
$email = new CakeEmail();
$email->from('cameron@driz.co.uk');
$email->to('cameron@driz.co.uk');
$email->subject('Test Email from Cron');
$result = $email->send('Hello from Cron');
}
}
?>
我想说每晚午夜都运行这段代码。
接下来我该怎么办?下一部分真让我困惑!我已经阅读了本书:http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html我应该在终端中运行一些代码以使其在某个时间执行此操作等等。我可以使用我的托管服务提供商轻松设置这些代码。
但我对Console目录感到困惑。应该在这里的哪个文件夹中输入:https://github.com/cakephp/cakephp/tree/master/app/Console
/Console/Command
/Console/Command/Tasks
/Console/Templates
还注意到很多文件都是.php(例如我的Shell文件也是.php),但根据我读过Cron作业的文档,执行的文件应该是.sh?
任何人都可以对此有所了解吗?
调用该命令的代码是什么?
e.g。我认为这是不正确的:0 0 * * * cd /domains/driz.co.uk/html/App && cake/Console MyShell sendEmail
由于
答案 0 :(得分:2)
没有。没有办法只在PHP中做到这一点。但这并不重要,因为crons很容易设置。
在你链接到的那篇文章中,你仍然需要设置一个cron - 区别在于你设置了一个运行所有其他cron的cron,而不是每个作业设置一个cron。所以,不管怎样,你必须学会创建一个cron。
说明取决于您服务器的操作系统以及您所使用的主机。有些主机可以通过GUI界面(如cPanel等)设置cron作业,而无需触摸终端。
通常很容易在线查找有关如何使用主机或服务器操作系统设置cron作业的说明,但如果您遇到问题,请使用您的主机名称更新您的问题,以及您的服务器操作系统和版本。
另外---------------------------------
通常在cron作业中,您将运行shell脚本(.sh)。但是对于这种情况不要担心;你的结局将以.php结尾。
Re:目录结构:
/Console/Command
是新文件的用途。
如果你正在做很多shell的东西,你可能想要将公共代码抽象到/Console/Command/Task
文件夹中。详细了解here。在您的情况下可能不需要这样做。
/Console/Command/Templates
是您可以为Cake烘焙控制台添加自定义模板的地方 - 暂时不用担心。
如果我只运行了几个cron作业,那么我只创建一个名为CronJobsShell.php的文件,并将它们全部放在那里。
真的,你应该从头到尾阅读Cake documentation on shells。它会让你很好地了解这一切是如何挂在一起的。
答案 1 :(得分: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应该在午夜之后运行写: -
0 0 * * * /PATH TO APP/Console/cake hello
为了更好地理解,请参阅https://www.youtube.com/watch?v=ljgvo2jM234
谢谢!