【问题标题】:Creating Cron Jobs in CakePHP 2.x在 CakePHP 2.x 中创建 Cron 作业
【发布时间】:2013-10-13 10:55:03
【问题描述】:

我试图在我的 CakePHP 2.x 应用程序中创建一个 cron 作业。但我在网上阅读的所有资源似乎要么完全不同,几乎没有一致性,要么用非常复杂的术语解释。

基本上我在/app/Console/Command中创建了以下文件MyShell.php

<?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 我应该在终端中运行一些代码以使其在特定时间执行等等。我可以使用我的托管服务提供商来设置这些似乎很容易。

但我对控制台目录感到很困惑。什么应该放在什么文件夹里: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 &amp;&amp; cake/Console MyShell sendEmail

谢谢

【问题讨论】:

    标签: php cakephp cron


    【解决方案1】:

    这可以通过以下步骤很容易地完成 - :

    1) 在 Console/Command 中创建一个 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

    谢谢!

    【讨论】:

      【解决方案2】:

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

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

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

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

      还有---------------------------------

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

      Re: 目录结构:

      /Console/Command 是您的新文件所在的位置。

      如果您正在做大量的 shell 工作,您可能希望将通用代码抽象到 /Console/Command/Task 文件夹中。阅读更多关于 here 的信息。在您的情况下,这可能不需要。

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

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

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

      【讨论】:

      • 那么像 WordPress 这样的软件是如何做到的呢?因为它正在运行它们以自动更新,我没有触摸终端。
      • Wordpress 不会自动更新。它会询问您是否要更新,当您登录到管理界面时它会这样做。所以,没有cron运行。当有人查看管理页面时,Wordpress 可以根据最新版本检查其当前版本,如果不是最新版本,则显示一条消息,询问您是否要升级。
      • 在 v3.7 中,它会自动更新并每晚发送一封包含进程日志的电子邮件。 wordpress.org/news/2013/09/wordpress-3-7-beta-1
      • WordPress 只是在每个请求上触发其 Cron API,因此,如果访问者、机器人或用户都没有点击您的页面,则调度的操作将不会执行。对于真正的、准确定时的 cronjob 行为,您需要自己设置一个真正的 cronjob:tommcfarlin.com/wordpress-cron-jobs@Cameron
      • 好的...我有一段时间没用过Wordpress了。尽管如此,我的回答仍然成立。仅通过 PHP 无法运行“真正的”cron。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多