2

我试图在我的 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?

任何人都可以对此有所了解吗?

调用该命令的代码是什么?

例如会假定这是不正确的:0 0 * * * cd /domains/driz.co.uk/html/App && cake/Console MyShell sendEmail

谢谢

4

2 回答 2

2

不,没有办法只在 PHP 中做到这一点。但这没关系,因为 crons 很容易设置。

在您链接到的那篇文章中,您仍然必须设置一个 cron - 不同之处在于您设置了一个运行所有其他 cron 的 cron - 而不是为每个作业设置一个 cron。因此,无论哪种方式,您都必须学习创建一个 cron。

这些说明取决于您的服务器的操作系统以及您使用的主机。一些主机可以通过 cPanel 之类的 GUI 界面设置 cron 作业,而无需触摸终端。

通常很容易在网上找到有关如何使用您的主机或服务器操作系统设置 cron 作业的说明,但如果您遇到问题,请使用您的主机名称以及您的服务器操作系统和版本更新您的问题。

还 - - - - - - - - - - - - - - - - -

通常在 cron 作业中,您将运行一个 shell 脚本 (.sh)。但是对于这种情况,请不要担心;你的将以 .php 结尾。

回复:目录结构:

/Console/Command是你的新文件应该去的地方。

如果你在做很多 shell 的东西,你可能想把通用代码抽象到/Console/Command/Task文件夹中。在此处阅读更多相关信息。在您的情况下,这可能不需要。

/Console/Command/Templates是您可以为 Cake bake 控制台放置自定义模板的地方 - 现在不用担心。

如果我只有几个 cron 作业要运行,那么我只创建一个名为 CronJobsShell.php 的文件,然后将它们全部放入其中。

真的,你应该从头到尾阅读 Cake 的关于 shell 的文档。它会给你一个很好的画面,让你了解这一切是如何联系在一起的。

于 2013-10-06T23:33:27.383 回答
0

这可以通过以下步骤轻松完成 -

1)在控制台/命令中创建一个shell让我们说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

谢谢!

于 2017-10-05T09:47:11.300 回答