任务调度定义在 app/Console/Kernel.php
文件的 schedule
方法中, 该方法中已经包含了一个示例. 你可以自由地添加你须要的调度任务到Schedule
工具
开启调度
// 在 linux 环境中实行 root php /var/www/laravel/artisan schedule:run
/var/www/laravel
为你的项目目录, 该 Cron
将会每分钟调用 Laravel
命令调度, 然后 Laravel
评估你的调度任务并运行到期的任务.
定义调度
在 项目根目录
下创建定时任务所须要进行的操作
创建命令
php artisan make:console Stat_Test
该操作会在 app/Console/Commands
下天生一个 Stat_Test.php
, 以下是小例子
<?phpnamespace 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
的完全代码
<?phpnamespace 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');// 每周星期一 01:00 运行一次...$schedule->command('stat:test')->weekly()->->mondays()->at('01:00');
调度常用选项
当然,你可以分配多种调度到任务
->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); 基于特定测试运行任务
来源于:http://aabvip.com