我尝试在我的 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('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5734363a322538391733253e2d79343879223c" rel="noreferrer noopener nofollow">[email protected]</a>');
$email->to('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2142404c44534e4f614553485b0f424e0f544a" rel="noreferrer noopener nofollow">[email protected]</a>');
$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?
有人可以对此进行更多说明吗?
调用该命令的代码是什么?
例如会认为这是不正确的:0 0 * * * cd /domains/driz.co.uk/html/App && cake/Console MyShell sendEmail
谢谢
最佳答案
没有。仅用 PHP 是没有办法做到这一点的。但这并不重要,因为 cron 很容易设置。
在您链接到的那篇文章中,您仍然需要设置一个 cron - 区别只是您设置了一个 cron,它运行所有其他 cron - 而不是为每个作业设置一个 cron。因此,无论哪种方式,您都必须学习创建 cron。
这些说明取决于您服务器的操作系统以及您使用的主机。有些主机可以通过 GUI 界面(如 cPanel 或其他东西)设置 cron 作业,而无需触摸终端。
通常很容易在网上找到有关如何使用主机或服务器操作系统设置 cron 作业的说明,但如果遇到问题,请使用主机名称以及服务器操作系统和版本更新您的问题。
还有----------------------------------
在 cron 作业中,您通常会运行 shell 脚本 (.sh)。但在本例中不必担心这一点;你的将以 .php 结尾。
回复:目录结构:
/Console/Command
是新文件所在的位置。
如果您正在执行大量 shell 操作,您可能需要将通用代码抽象到 /Console/Command/Task
文件夹中。了解更多相关信息 here 。您的情况可能不需要这样做。
/Console/Command/Templates
是您可以为蛋糕烘焙控制台放置自定义模板的位置 - 现在不用担心。
如果我只需要运行几个 cron 作业,那么我只创建一个名为 CronJobsShell.php 的文件,并将它们全部放入其中。
真的,你应该阅读 Cake 的 documentation on shells从开始到结束。它会给你一个很好的画面,让你了解这一切是如何结合在一起的。
关于php - 在 CakePHP 2.x 中创建 Cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19215156/