laravel总结——任务调度
laravel 的任务调度,默认在 App\Console\Kernel 类 的schedule 中
三种调度 计划方式:
闭包形式 : call
protected function schedule(Schedule $schedule){
$schedule->call(function () {
//自定义逻辑处理
})->daily(); //调度频率
}artisan 命令 或者 系统命令 :
$schedule->command('emails:send --force')->daily(); command 类 :command
$schedule->command(Command::class, ['--force'])->daily();
command 类 需要在 App\Console\Kernel 中注册
protected $commands = [
\App\Console\Commands\Inspire::class,
];
$schedule->exec('node /home/forge/script.js')->daily(); //可以将命令发送到系统
调度频率设置
->cron('* * * * *') 自定义调度任务->everyMinute(); 每分钟执行一次任务->everyFiveMinutes(); 每五分钟执行一次任务->everyTenMinutes(); 每十分钟执行一次任务->everyThirtyMinutes(); 每半小时执行一次任务->hourly(); 每小时执行一次任务->hourlyAt(17); 每一个小时的第 17 分钟运行一次->daily(); 每到午夜执行一次任务->dailyAt('13:00'); 每天的 13:00 执行一次任务->twiceDaily(1, 13); 每天的 1:00 和 13:00 分别执行一次任务->weekly(); 每周执行一次任务->monthly(); 每月执行一次任务->monthlyOn(4, '15:00'); 在每个月的第四天的 15:00 执行一次任务->quarterly(); 每季度执行一次任务->yearly(); 每年执行一次任务->timezone('America/New_York'); 设置时区
额外限制条件
->weekdays(); 限制任务在工作日->sundays(); 限制任务在星期日->mondays(); 限制任务在星期一->tuesdays(); 限制任务在星期二->wednesdays(); 限制任务在星期三->thursdays(); 限制任务在星期四->fridays(); 限制任务在星期五->saturdays(); 限制任务在星期六->between($start, $end); 限制任务运行在开始到结束时间范围内->unlessBetween($start,$end)->when(Closure); 限制任务基于一个为真的验证,传递一个闭包,返回真会继续执行->skip(Closoure); 返回真,停止执行
避免重复任务
->withoutOverlapping();
强制维护模式下也运行
->evenInMaintenanceMode();
->sendOutputTo($filePath); //输出任务到文件 ->appendOutputTo($filePath); //添加到文件
发送到邮件$schedule->command('foo') ->daily() ->sendOutputTo($filePath) //必须要这个 ->emailOutputTo('foo@example.com');
任务钩子
->before(Clousoure function(){ });->after(Clousoure function(){ });
ping
->pingBefore($url);->thenPing($url);需要扩展包支持composer require guzzlehttp/guzzle
一次性启动任务: 常用于测试
php artisan schedule:run //运行所有任务
定时调度
crontab -e * * * * * php programPath/artisan schedule:run >> /dev/null 2>&1
总结:可在 command 类的 handle 方法中调用service 服务
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。