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 。php

  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 中laravel

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

全部的計劃任務定義在 AppConsoleKernel 類的 schedule 方法中,Artisan命令寫在commands屬性中。sql

protect $commands = [
        Commands\{聲明的腳本文件名稱}::class
    ];
    
    protected function schedule(Schedule $schedule)
    {
        // 上面的Artisan命令將在每晚執行
        $schedule->command('stat:generate')->daily();
    }
相關文章
相關標籤/搜索