在之前,開發者須要爲每個須要調度的任務編寫一個
Cron
條目,這是很讓人頭疼的事。你的任務調度不在源碼控制中,你必須使用SSH
登陸到服務器而後添加這些Cron
條目。Laravel
命令調度器容許你平滑而又富有表現力地在Laravel
中定義命令調度,而且服務器上只須要一個Cron
條目便可。php
任務調度又是咱們俗稱的「計劃任務」linux
任務調度定義在app/Console/Kernel.php
文件的schedule
方法中,該方法中已經包含了一個示例。你能夠自由地添加你須要的調度任務到Schedule
對象laravel
1.開啓調度服務器
在linux環境中執行app
* * * * * root php /var/www/laravel/artisan schedule:run
/var/www/laravel
爲你的項目目錄ide
該Cron
將會每分鐘調用Laravel
命令調度,而後,Laravel
評估你的調度任務並運行到期的任務。測試
2.定義調度ui
2.1
在項目根目錄中 下建立定時任務所須要進行的操做this
建立命令:php artisan make:console Stat_Test
url
該操做會在app/Console/Commands
下生成一個Stat_Test.php
下面打開該文件 給你們展現一個簡單而又完整的代碼例子
<?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('定時/數據插入成功.',$id); }else{ \Log::error('定時/數據插入失敗.',$time); } } }
值得注意的是 這個文件中的
$signature = 'stat:test'
這個簽名在Kernel.php
中也要相應用到
下面也附上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) { // 爲測試方便 每分鐘執行一次 $schedule->command('stat:test')->everyMinute(); } }
再強調一次 $schedule->command('stat:test')
裏面的stat:test必須和上面的簽名 $signature = 'stat:test'
對應上
protected $commands = [ \App\Console\Commands\Inspire::class, '\App\Console\Commands\Stat_Test', ];
也要把引入你的調度文件
// 每週星期六11:00運行一次... $schedule->command('stat:test')->weekly()->saturdays()->at('11:00'); // 每週星期一:00運行一次... $schedule->command('stat:test')->weekly()->->mondays()->at('01:00');
2.2 調度經常使用選項
固然,你能夠分配多種調度到任務
->cron('* * * * *'); 在自定義Cron調度上運行任務 ->everyMinute(); 每分鐘運行一次任務 ->everyFiveMinutes(); 每五分鐘運行一次任務 ->everyTenMinutes(); 每十分鐘運行一次任務 ->everyThirtyMinutes(); 每三十分鐘運行一次任務 ->hourly(); 每小時運行一次任務 ->daily(); 天天凌晨零點運行任務 ->dailyAt('13:00'); 天天13:00運行任務 ->twiceDaily(1, 13); 天天1:00 & 13:00運行任務 ->weekly(); 每週運行一次任務 ->monthly(); 每個月運行一次任務
下面是額外的調度約束列表:
->weekdays(); 只在工做日運行任務 ->sundays(); 每一個星期天運行任務 ->mondays(); 每一個星期一運行任務 ->tuesdays(); 每一個星期二運行任務 ->wednesdays(); 每一個星期三運行任務 ->thursdays(); 每一個星期四運行任務 ->fridays(); 每一個星期五運行任務 ->saturdays(); 每一個星期六運行任務 ->when(Closure); 基於特定測試運行任務