在CakePHP 2.x中创建Cron作业

时间:2013-10-06 23:27:45

标签: php cakephp cron

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

由于

2 个答案:

答案 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

谢谢!

相关问题