Laravel 4 的 Cron 作业

Posted

技术标签:

【中文标题】Laravel 4 的 Cron 作业【英文标题】:Cron Job with Laravel 4 【发布时间】:2013-01-09 08:47:58 【问题描述】:

我正在尝试了解如何在 Laravel 4 中设置 cron 作业,以及我需要在 artisan 中为此运行的命令。

在 Laravel 3 中,有 Tasks,但这些似乎不再存在,并且没有关于如何操作的文档......

【问题讨论】:

【参考方案1】:

Tasks 被替换为 commands,这在 Laravel 4 中是一样的,但集成了 Symfony 的控制台组件,比以前更强大。

【讨论】:

我发现这篇文章也很有帮助。显示如何在 crontab 中准确调用“命令”:maxoffsky.com/code-blog/…【参考方案2】:

或者,如果你不喜欢命令,有一个非官方的 Laravel 4 cron 包:https://github.com/liebig/cron

【讨论】:

【参考方案3】:

下面我详细介绍了在Laravel 4 中使用commands 和cron 的教程。为了便于理解,我分为四个步骤。


第 1 步:在 Laravel 4 中创建命令:

php artisan command:make RefreshStats

使用上面的命令,Laravel 将在目录app/commands/ 中创建一个名为RefreshStats.php 的文件

RefreshStats.php 是这样的文件:

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class RefreshStats extends Command 

        protected $name = 'command:name';
        protected $description = 'Command description.';

        public function __construct() 
                parent::__construct();
        

        public function fire()

        

        protected function getArguments() 
            return array(
                array('example', InputArgument::REQUIRED, 'An example argument.'),
            );
        

        protected function getOptions() 
            return array(
                array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
            );
        



第 2 步:RefreshStats 文件的简单“配置”:

你应该改变这一行:

protected $name = 'command:name';

到这样的事情:

protected $name = 'refresh:stats';

如果您不需要参数(选项相同),请更改此行:

protected function getArguments() 
      return array(
          array('example', InputArgument::REQUIRED, 'An example argument.'),
      );

到:

protected function getArguments() 
      return array();

现在注意 fire 函数。该命令将执行在该函数中编写的源代码。示例:

public function fire()
    echo "Hello world";    


步骤#3:注册命令:

您需要注册该命令。所以打开app/start/artisan.php文件,添加一行如下:

Artisan::add(new RefreshStats);


第 4 步:创建 CRON 计划任务:

最后,您可以按如下方式添加计划任务:

crontab -e

并添加一行(每 30 分钟运行一次命令),如下所示:

*/30 * * * * php path_laravel_project/artisan refresh:stats


一切都会自动工作!

【讨论】:

很好的解释 @tomloprod 如何检查 cron 是否正常工作?你写回声“你好世界”;在 fire() 函数中,但它会在哪里打印 "Hello world" 。我知道它的基本知识,但我是 php 新手。 @AdarshTiwari 这是一个简单的例子。这将在控制台中打印Hello world。您必须编写代码,而不是 echo "Hello world"。例如发送邮件:mail("foo@bar.es", "Subject", "Hello world", "From:fromemail@foo.es"); @tomloprod,你能解释一下我应该在哪里写crontab -e*/30 * * * * php path_laravel_project/artisan refresh:stats吗? @vijayrana 取决于您的开发环境。你想在哪里使用命令?【参考方案4】:

好的,所以我发现 this 对于在 laravel 4.2 中设置 crons 很有用。

【讨论】:

以上是关于Laravel 4 的 Cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 中的随机 cron 作业

使用 aws eb 和 laravel 任务调度的 Cron 作业

Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业

Laravel Scheduler and Cron-Laravel如何知道不运行基于daily(),hourly()等的计划作业

Laravel 队列(数据库驱动程序)+ Cron 作业(任务调度程序)堆叠并且在服务器崩溃后不再发送

如何在线运行 Laravel 调度命令作为 Cron Job