多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 任务调度定义在`app/Console/Kernel.php`文件的schedule方法中 实际处理在定义的command中的handler中处理 # 操作 我们来创建个 command 命令 `php artisan make:command LogInfo` 定义我们的command方法 `protected $signature = 'Log:info';` handle中就定义 `Log::info('hello world');` 然后我们要在kernel中注册这个命令 ~~~ protected $commands = [ \App\Console\Commands\LogInfo::class, ]; ~~~ 定时任务,我们让他每小时执行 ~~~ protected function schedule(Schedule $schedule) { $schedule->command('Log:info') ->everyMinute(); } ~~~ 然后我们在命令行执行下 ~~~ ➜ laravel54 php artisan schedule:run Running scheduled command: '/usr/local/Cellar/php71/7.1.8_20/bin/php' 'artisan' Log:info > '/dev/null' 2>&1 ~~~ 我们可以在log文件夹下看到这个log信息了 然后我们开始生成这个定时任务,到手册中复制这行然后写入到cron.txt中 ``` echo '* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1' > cron.txt ``` 显示项目的路径 ``` pwd ``` 然后在cron.txt中把路径替换上去 ``` * * * * * php /Users/jdxia/Desktop/code/laravel54/artisan schedule:run >> /dev/null 2>&1 ``` 开始运行 ``` crontab cron.txt crontab -l ``` 如果我们要停止这个定时任务 ``` crontab -r ``` 其他的一些请参考手册 # laravel5.3 在 laravel 5.3.29 版本之后,Scheduler 终于添加了 hourlyAt 方法,可以像下面这样来使用: ~~~ $schedule->command('nofify:email')->hourlyAt(15); ~~~ 这样就可以在每个整点的 15 分的时候运行这个 notify:email 的任务了。或者说你也可以在 hourlyAt 前面指定其他的日期,比如: ~~~ $schedule->command('nofify:email') ->weekdays() ->hourlyAt(15); ~~~ 这样就限定这个任务在工作日的每个整点的 15 分执行了 # 实现方法 ~~~ protected function schedule(Schedule $schedule) { //方法一: // $schedule->call(function () { // Log::info('任务调度'); // })->everyMinute(); //方法二: $schedule->command('test')->everyMinute(); } ~~~ 上面举例了两种实现方法,方法一是用闭包,方法二是用Artisan命令实现的。 调度的时间可以有多种: ~~~ ->cron(‘* * * * *’); 在自定义Cron调度上运行任务 ->everyMinute(); 每分钟运行一次任务 ->everyFiveMinutes(); 每五分钟运行一次任务 ->everyTenMinutes(); 每十分钟运行一次任务 ->everyThirtyMinutes(); 每三十分钟运行一次任务 ->hourly(); 每小时运行一次任务 ->daily(); 每天凌晨零点运行任务 ->dailyAt(‘13:00’); 每天13:00运行任务 ->twiceDaily(1, 13); 每天1:00 & 13:00运行任务 ->weekly(); 每周运行一次任务 ->monthly(); 每月运行一次任务 ~~~ ## 补充 crontab -e: 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 crontab -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 介绍一下crontab的文件格式# 分 时 日 月 星期 要运行的命令 第1列分钟0~59 第2列小时0~23(0表示子夜) 第3列日1~31 第4列月1~12 第5列星期0~7(0和7表示星期天) 第6列要运行的命令 更多的内容请看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html