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 作业的主要内容,如果未能解决你的问题,请参考以下文章
使用 aws eb 和 laravel 任务调度的 Cron 作业
Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业
Laravel Scheduler and Cron-Laravel如何知道不运行基于daily(),hourly()等的计划作业