关于laravel5.5的定时任务详解(demo)
一、准备环境
服务器linux(debian)+nginx+mysql+php 环境
框架laravel 5.5 (确认能跑通)
需求每天晚上1点执行定时操作
二、定时任务的步骤
1、根据文档,创建命令
进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:mand 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。
例如我们创建一个定时任务,名称为Test:
//这里使用laravel给定的 php artisan来生成命令,此处的Test就是我们要生成的文件 //这里的artisan代表的不仅仅是laravel自带的命令,他其实是laravel下的artisan目录,因为这个目录没有x,也就是可执行权限,所以不能使用 ./artisan 来执行,只能通过php来执行 php artisan make:mand Test
2、创建完之后,打开console目录下的mands目录,我们会发现里面已经有了一个文件
大致的代码如下
<?php namespace App\Console\Commands; use App\Services\CalculateDataService; use Illuminate\Console\Command; class Test extends Command { //此处代表laravel自动生成的名称,狼蚁网站SEO优化执行的时候能用到 protected $signature = 'test:data'; //此处代表的是描述,并没有什么用的 protected $description = 'test data'; / 计算数据服务的 service 属性 这里由于要用到我们的逻辑,所以提前定义一下,方便狼蚁网站SEO优化使用 @var CalculateDataService / protected $service; //这个是laravel自带的构造方法。初始状态下是空的。 //我这里由于要调用CalculateDataService 类的一个方法,所有就用依赖注入的方式引入了一下。 public function __construct(CalculateDataService $service) { parent::__construct(); $this->service = $service; } / Execute the console mand. 这里就是我们执行操作的地方,里面是mand要处理的业务。根据我们的需求, 调用类中的calculateData()方法,该方法是我们自己的需求逻辑部分。 @return mixed / public function handle() { try { $this->service->calculateData(); } catch (\Exception $e) { $this->error($e->getMessage()); } // line()方法是mand类中自带的方法,可以输出我们自定义的信息 $this->line('calculate Data Suess!'); } }
3、定时命令创建好之后,我们需要修改kernel.php文件
kernel.php文件里面,主要是定义命令的调度时间,定义命令的执行先后顺序等。
这部分参考laravel官方文档
4、我的kernel.php文件
<?php //此处省略了命名空间部分 class Kernel extends ConsoleKernel { / The Artisan mands provided by your application. 注此处是引入我们新创建的类。由于我们此处是使用命令名来操作的,所以没用上这个类名。不过还是引入比较标准 可以使用 mand 方法通过命令名或类来调度一个 Artisan 命令 $schedule->mand('emails:send --force')->daily(); $schedule->mand(EmailsCommand::class, ['--force'])->daily(); @var array / protected $mands = [ Test::class, CalculateData::class, UpdateOffset::class, ]; / Define the application's mand schedule. 注 1、这个方法按照自己的需求,确定定时方法的执行顺序。通过after,before等关键词来控制 2、此处相当于规定同意的定时执行时间,如都在0:30分执行狼蚁网站SEO优化的几个定时任务 @param \Illuminate\Console\Scheduling\Schedule $schedule @return void / protected function schedule(Schedule $schedule) { // 每天凌晨 0.45 执行同步 aliyun 数据的任务,并发送邮件给 $schedule->mand('iot:sync Flow') ->after(function() { //更新偏移量,after里面不能加参数 Artisan::call('Test:data'); }) ->after(function () { // 执行同步数据命令完成后 则执行计算数据任务 Artisan::call('calculate:data'); }); } / Register the mands for the application. //这个部分是laravel自动生成的,引入我们生成的命令文件 @return void / protected function mands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
关于具体的调度方法schedule(),大家可以去laravel文档看看,里面可以规定很多东西。我这边是使用的钩子函数。在要执行多个定时任务的时候,通过after,before等方法,可以让多个定时任务变得有序起来。
三、执行我们的定时
虽然laravel的定时任务一直都说的很强大,但本质上还是离不开服务器上的cron脚本。。
1、先查看服务器上的定时条目
crontab -l
2、新增或编辑cron 条目
crontab -e
3、在里面新增我们写好的方法路径
这里面新加上我们的定时任务。
第一是 规定定时任务的执行时间
第二是 要把项目的artisan目录路径写对
第三 schedule:run就是执行咱们之前写的任务调度,也就是kernel.php文件中的schedule方法。
如果是大家自己测试的话,可以随便写个定时任务,每分钟执行以下,这样就能准确的知道自己的定时任务是否正确了。
以上这篇关于laravel5.5的定时任务详解(demo)就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程