一、准备环境
服务器:linux(debian)+nginx+mysql+php 环境
框架:laravel 5.5 (确认能跑通)
需求:每天晚上1点执行定时操作
二、定时任务的步骤
1、根据文档,创建命令
首先进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。
例如我们创建一个定时任务,名称为Test:
//这里使用laravel给定的 php artisan来生成命令,此处的Test就是我们要生成的文件 //这里的artisan代表的不仅仅是laravel自带的命令,他其实是laravel下的artisan目录,因为这个目录没有x,也就是可执行权限,所以不能使用 ./artisan 来执行,只能通过php来执行 php artisan make:command Test
2、创建完之后,打开console目录下的commands目录,我们会发现里面已经有了一个文件
大致的代码如下:
<?php namespace App\Console\Commands; use App\Services\CalculateDataService; use Illuminate\Console\Command; class Test extends Command { //此处代表laravel自动生成的名称,下面执行的时候能用到 protected $signature = 'test:data'; //此处代表的是描述,并没有什么用的 protected $description = 'test data'; /** * 计算数据服务的 service 属性 *这里由于要用到我们的逻辑,所以提前定义一下,方便下面使用 * @var CalculateDataService */ protected $service; //这个是laravel自带的构造方法。初始状态下是空的。 //我这里由于要调用CalculateDataService 类的一个方法,所有就用依赖注入的方式引入了一下。 public function __construct(CalculateDataService $service) { parent::__construct(); $this->service = $service; } /** * Execute the console command. *这里就是我们执行操作的地方,里面是command要处理的业务。根据我们的需求, *调用类中的calculateData()方法,该方法是我们自己的需求逻辑部分。 * @return mixed */ public function handle() { try { $this->service->calculateData(); } catch (\Exception $e) { $this->error($e->getMessage()); } // line()方法是command类中自带的方法,可以输出我们自定义的信息 $this->line('calculate Data Success!'); } }
3、定时命令创建好之后,我们需要修改kernel.php文件
kernel.php文件里面,主要是定义命令的调度时间,定义命令的执行先后顺序等。
这部分参考laravel官方文档:
http://laravelacademy.org/post/8484.html