应用场景:
- 定时脚本任务
需要在凌晨计算前一日的数据并汇总到统计表中。 - Artisan命令
复杂的定时任务可以配合Artisan命令。
Artisan命令:
- 按照 Laravel Artisan命令行 文档,了解它的使用和配置。
- 使用Artisan命令
php artisan make:command
{脚本名称} 生成执行文件,文件在app/Console/Commands
中查看。 - 添写Artisan命令的名称和描述,例如:
protected $signature = 'stat:generate {start? : 脚本统计的起始时间(选填 eg.2017-10-01 )} {end? : 脚本统计的结束时间(选填)}';
protected $description = '生成每日的统计信息';
$signature属性中的 start? end? 表示可输入的可选参数,这里提供了脚本开始和结束时间的可选项,用于生成指定时间日期内的统计信息,eg. php artisan stat:generate 2017-08-01 。
- 在handle()方法中写程序部分
public function handle()
{
// 如果未输入日期参数,默认选择前一天作为统计时间(??是php7新语法)
$this->date = $this->argument('start') ?? date('Y-m-d', strtotime('-1 day'));
$endDate = $this->argument('end') ?? date('Y-m-d');
// 判断输入的日期格式是否正确
if (!strtotime($this->date) || !strtotime($endDate)) {
$this->error('请输入正确的日期格式!');die;
}
// 循环执行每一天的统计脚本
while ($this->date < $endDate) {
// 这里是需要执行的统计逻辑,sql等
$this->_active_num_game();
// 每执行一次,统计日期加1天
$this->date = date('Y-m-d', strtotime("{$this->date} +1 day"));
}
}
定时脚本任务:
将以下命令添加到cron 中
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
所有的计划任务定义在 AppConsoleKernel 类的 schedule 方法中,Artisan命令写在commands属性中。
protect $commands = [
Commands\{声明的脚本文件名称}::class
];
protected function schedule(Schedule $schedule)
{
// 上面的Artisan命令将在每晚执行
$schedule->command('stat:generate')->daily();
}