• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于laravel5.5的定时任务详解(demo)

    一、准备环境

    服务器: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

    4、我的kernel.php文件

    ?php
    //此处省略了命名空间部分
    class Kernel extends ConsoleKernel
    {
     /**
     * The Artisan commands provided by your application.
     *注:此处是引入我们新创建的类。由于我们此处是使用命令名来操作的,所以没用上这个类名。不过还是引入比较标准
     * 可以使用 command 方法通过命令名或类来调度一个 Artisan 命令:
     * $schedule->command('emails:send --force')->daily();
     * $schedule->command(EmailsCommand::class, ['--force'])->daily();
     *
     * @var array
     */
     protected $commands = [
     Test::class,
     CalculateData::class,
     UpdateOffset::class,
     ];
    
     /**
     * Define the application's command schedule.
     * 注:
     * 1、这个方法按照自己的需求,确定定时方法的执行顺序。通过after,before等关键词来控制
     * 2、此处相当于规定同意的定时执行时间,如都在0:30分执行下面的几个定时任务
     * @param \Illuminate\Console\Scheduling\Schedule $schedule
     * @return void
     */
     protected function schedule(Schedule $schedule)
     {
     // 每天凌晨 0.45 执行同步 aliyun 数据的任务,并发送邮件给 ***
      $schedule->command('iot:sync Flow')
      ->after(function() {
       //更新偏移量,after里面不能加参数
      Artisan::call('Test:data');
      })
      ->after(function () {
      // 执行同步数据命令完成后 则执行计算数据任务
      Artisan::call('calculate:data');
      });
     }
    
     /**
     * Register the commands for the application.
     * //这个部分是laravel自动生成的,引入我们生成的命令文件
     * @return void
     */
     protected function commands()
     {
     $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)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Laravel定时任务的每秒执行代码
    • Laravel框架定时任务2种实现方式示例
    • Laravel实现定时任务的示例代码
    上一篇:laravel 出现command not found问题的解决方案
    下一篇:Laravel5.5 数据库迁移:创建表与修改表示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    关于laravel5.5的定时任务详解(demo) 关于,laravel5.5,的,定时,任务,