Laravel 任務(wù)調(diào)度 ( Console )

在以前, 開發(fā)者需要為每一個(gè)需要調(diào)度的任務(wù)編寫一個(gè) Cron 條目, 這是很讓人頭疼的事. 你的任務(wù)調(diào)度不在源碼控制中, 你必須使用 SSH 登錄到服務(wù)器然后添加這些 Cron 條目. Laravel 命令調(diào)度器允許你平滑而又富有表現(xiàn)力地在 Laravel 中定義命令調(diào)度, 并且服務(wù)器上只需要一個(gè) Cron 條目即可, 任務(wù)調(diào)度又是我們俗稱的 “計(jì)劃任務(wù)”

任務(wù)調(diào)度定義在app/Console/Kernel.php文件的schedule方法中,該方法中已經(jīng)包含了一個(gè)示例。你可以自由地添加你需要的調(diào)度任務(wù)到Schedule對(duì)象

開啟調(diào)度

//在linux環(huán)境中執(zhí)行
* * * * * root php /var/www/laravel/artisan schedule:run

/var/www/laravel為你的項(xiàng)目目錄

Cron 將會(huì)每分鐘調(diào)用Laravel命令調(diào)度,然后,Laravel評(píng)估你的調(diào)度任務(wù)并運(yùn)行到期的任務(wù)。

定義調(diào)度

項(xiàng)目根目錄 下創(chuàng)建定時(shí)任務(wù)所需要進(jìn)行的操作

創(chuàng)建命令

創(chuàng)建命令(Laravel 5.1):php artisan make:console Stat_Test

創(chuàng)建命令(Laravel 5.3):php artisan make:command Stat_Test

該操作會(huì)在app/Console/Commands下生成一個(gè)Stat_Test.php

下面打開該文件 給大家展示一個(gè)簡(jiǎn)單而又完整的代碼例子

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;  
class Stat_Test extends Command  
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
     protected $signature = 'stat:test';

     /**
      * The console command description.
      *
      * @var string
      */
     protected $description = 'stat:test';

     /**
      * Create a new command instance.
      *
      * @return void
      */
     public function __construct()
     {
         parent::__construct();
     }

     /**
      * Execute the console command.
      *
      * @return mixed
      */
     public function handle()
     {
         $this->addData();
     }

     // 例子
     public function addData() {
         $time = time();
         $rand = rand(1, 1000);
         $id = \DB::table('data_test')->insertGetId(['uuid' => $time, 'uuid' => $rand]);
        if ($id) {
           \Log::info('定時(shí)/數(shù)據(jù)插入成功', $id);
        } else {
           \Log::error('定時(shí)/數(shù)據(jù)插入失敗', $time);
        }
    }
 }

值得注意的是 這個(gè)文件中的 $signature = 'stat:test' 這個(gè)簽名在 Kernel.php 中也要相應(yīng)用到, 下面是附上 Kernel.php 的完整代碼

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;  
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel  
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\Inspire::class,
        '\App\Console\Commands\Stat_Test',
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
       //  為測(cè)試方便 每分鐘執(zhí)行一次
        $schedule->command('stat:test')->everyMinute();
    }
}

再?gòu)?qiáng)調(diào)一次 $schedule->command('stat:test') 里面的 stat:test 必須和上面的簽名 $signature = 'stat:test' 對(duì)應(yīng)上

protected $commands = [  
    \App\Console\Commands\Inspire::class,
    '\App\Console\Commands\Stat_Test',
];

也要把引入你的調(diào)度文件

// 每周星期六11:00運(yùn)行一次...
$schedule->command('stat:test')->weekly()->saturdays()->at('11:00');

// 每周星期一:00運(yùn)行一次...
$schedule->command('stat:test')->weekly()->->mondays()->at('01:00');

調(diào)度常用選項(xiàng)

當(dāng)然,你可以分配多種調(diào)度到任務(wù)

->cron('* * * * *');           在自定義 Cron 調(diào)度上運(yùn)行任務(wù)  
->everyMinute();               每分鐘運(yùn)行一次任務(wù)  
->everyFiveMinutes();          每五分鐘運(yùn)行一次任務(wù)  
->everyTenMinutes();           每十分鐘運(yùn)行一次任務(wù)  
->everyThirtyMinutes();        每三十分鐘運(yùn)行一次任務(wù)  
->hourly();                    每小時(shí)運(yùn)行一次任務(wù)  
->daily();                     每天凌晨零點(diǎn)運(yùn)行任務(wù)  
->dailyAt('13:00');            每天  13:00運(yùn)行任務(wù)  
->twiceDaily(1, 13);           每天 1:00 & 13:00 運(yùn)行任務(wù)  
->weekly();                    每周運(yùn)行一次任務(wù)
->monthly();                   每月運(yùn)行一次任務(wù)

下面是額外的調(diào)度約束列表:

->weekdays();     只在工作日運(yùn)行任務(wù)
->sundays();     每個(gè)星期天運(yùn)行任務(wù)
->mondays();     每個(gè)星期一運(yùn)行任務(wù)
->tuesdays();     每個(gè)星期二運(yùn)行任務(wù)
->wednesdays();     每個(gè)星期三運(yùn)行任務(wù)
->thursdays();     每個(gè)星期四運(yùn)行任務(wù)
->fridays();     每個(gè)星期五運(yùn)行任務(wù)
->saturdays();     每個(gè)星期六運(yùn)行任務(wù)
->when(Closure);     基于特定測(cè)試運(yùn)行任務(wù)

原文出處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容