关于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)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Laravel实现定时任务的示例代码

    简介 定时任务是后端开发过程中一项十分常见的需求,常出现在数据统计.垃圾信息清理等场景中.Laravel 提供了一整套的定时任务工具,让我们只需要专注地完成逻辑,剩下的基础工作将由它来承担. 基本用法 生成命令 php artisan make:command AreYouOK 5.2 及之前的版本,此命令为 `php artisan make:console xxx` 编辑命令 编辑 `app/Console/Commands/AreYouOK.php` 文件,修改如下几处: ... ...

  • Laravel定时任务的每秒执行代码

    laravel中的任务调度可以不将每条命令都写入crontab,便于管理维护,而且可以基于laravel框架环境运行,而不需写独立的脚本执行,非常方便,但是最小的执行间隔也是一分钟,要想达到每秒执行的效果,就要借助shll脚本了,在shell脚本里循环60次每秒执行schedule:run命令,就达到了秒级定时任务的效果, 以下是我使用的shell脚本: #!/bin/bash step=1 #间隔的秒数 for (( i = 0; i < 60; i=(i+step) )); do /usr/

  • Laravel框架定时任务2种实现方式示例

    本文实例讲述了Laravel框架定时任务2种实现方式.分享给大家供大家参考,具体如下: 第一种 1.生成一个commands文件 > php artisan make:command test 2.打开文件进行修改 laravel\App\Console\Commands\test.php <?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Lo

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

    一.准备环境 服务器:linux(debian)+nginx+mysql+php 环境 框架:laravel 5.5 (确认能跑通) 需求:每天晚上1点执行定时操作 二.定时任务的步骤 1.根据文档,创建命令 首先进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成.该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务.

  • Java下SpringBoot创建定时任务详解

    序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了. 三.基于注解设定多线程定时任务 一.静态:基于注解 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响. 1.创建定时器 使用SpringBoo

  • springboot定时任务详解

    在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现 一.基于注解(静态) 1.pom 包配置 pom 包里面只需要引入 Spring Boot Starter 包即可 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactI

  • 最新Python APScheduler 定时任务详解

    目录 一.基本概念 1.1. 触发器:triggers 1.2.作业存储器:job stores 1.3.执行器 executors 1.4.调度器 schedulers 二.调度器详解 2.1.APScheduler有三种内置的触发器 2.2.触发器公共参数 2.3.date内置触发器 2.4.interval 周期触发任务 2.5.cron 触发器 在特定时间周期性地触发,和Linux crontab格式兼容. 一.基本概念 APScheduler全称Advanced Python Sche

  • SpringBoot集成quartz实现定时任务详解

    目录 准备知识点 什么是Quartz Quartz的体系结构 什么是Quartz持久化 实现案例 - 单实例方式 实现案例 - 分布式方式 后端实现 前端实现 测试效果 准备知识点 需要了解常用的Quartz框架. 什么是Quartz 来源百度百科, 官网地址:http://www.quartz-scheduler.org/ Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来

  • SpringBoot整合Quartz实现定时任务详解

    目录 Quartz简介 核心概念 Scheduler JobDetail Job Trigger SpringBoot整合Quartz 准备数据库表 Maven相关依赖 配置文件 quartz配置类 创建任务类 创建监听类 运行结果 Quartz简介 Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.它有很多特征,如:数据库支持,集群,插件,EJB

  • JS实现简单的选择题测评系统代码思路详解(demo)

    包含内容:JS封装表单,JS校验表单 说是测评系统,感觉只能算是一个小小的Demo,很水,,没有数据库库,,仅使用JS做简单的选择题测评系统 -------------------------------------------------------------------------------- 一.设计思路 表单封装: [1]由于采用JS封装提交所以,不需要form标签 [2]放置多个input标签,作为输入项 [3]编写JS获取输入项,并通过get方式提交到另一个页面 校验表单(显示结

  • 如何通过RabbitMq实现动态定时任务详解

    目录 一.需求背景 二.方案思考 (1)需求大致分析 (2)可尝试的方案 三.通过RabbitMQ实现延时任务并间接实现动态定时任务. (1)通过死信的方式实现延时信息消费 (2)通过MQ延时插件实现延时任务(重点) 四.MQ延时任务插件实现动态定时任务 (1)安装延时插件 (2)编码实现 (3)流程图 总结 一.需求背景 定时任务的需求所谓是数不胜数,其中实现方式也是百花齐放,用得最多的大概率为Springboot中的 @Scheduled(cron = “0 0 1 1 * ?”) 注解,或

  • Go编写定时器与定时任务详解(附第三方库gocron用法)

    目录 Go 编写定时器和定时任务 Timer Ticker gocron 安装 Demo 总结 Go 编写定时器和定时任务 在 项目开发当中,可能会遇到这样的场景: 1 A任务需要在多久之后执行一次(定时器) 2.B任务需要每隔多长时间执行一次 (定时任务) 谈到定时任务,离不开linux的crontab. 先简单了解下crontab // 每隔1秒执行一次 */1 * * * * ? // 每隔1分钟执行一次 0 */1 * * * ? // 每天0点执行一次 0 0 0 * * ? // 每

  • linux 定时任务详解

    习惯了使用 windows 的计划任务,使用 linux 中的 crontab 管理定时任务时很不适应. 所以把基本的用法总结如下. 创建一个简单的定时任务 每分钟输出一次当前的时间,输出到用户家目录下的 time.log 文件中. $ crontab -e * * * * * echo `date` >> /home/xxx/time.log crontab 程序的路径为 /usr/bin/crontab. 每个用户的定时任务可以在 /var/spool/cron/crontabs/ 目录下

随机推荐