laravel定时任务和命令行

应用场景:

  • 定时脚本任务
    需要在凌晨计算前一日的数据并汇总到统计表中。
  • Artisan命令
    复杂的定时任务可以配合Artisan命令。

Artisan命令:

  1. 按照 Laravel Artisan命令行 文档,了解它的使用和配置。
  2. 使用Artisan命令 php artisan make:command {脚本名称} 生成执行文件,文件在 app/Console/Commands 中查看。
  3. 添写Artisan命令的名称和描述,例如:
protected $signature = 'stat:generate {start? : 脚本统计的起始时间(选填 eg.2017-10-01 )} {end? : 脚本统计的结束时间(选填)}';

protected $description = '生成每日的统计信息';

$signature属性中的 start? end? 表示可输入的可选参数,这里提供了脚本开始和结束时间的可选项,用于生成指定时间日期内的统计信息,eg. php artisan stat:generate 2017-08-01 。

  1. 在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();
    }
阅读 3.3k

推荐阅读
Donne 的专栏
用户专栏

知其然,知其所以然。

16 人关注
58 篇文章
专栏主页