一、准备环境

服务器: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目录,我们会发现里面已经有了一个文件

大致的代码如下:

<?phpnamespace 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方法。

如果是大家自己测试的话,可以随便写个定时任务,每分钟执行以下,这样就能准确的知道自己的定时任务是否正确了。

end

laravel5.5的定时任务详解(demo)相关推荐

  1. navicat创建MySql定时任务详解

    目录 navicat创建MySql 定时任务详解 一.开起定时任务 二.通过navicat创建定时任务 三.关闭.启动.别名.移动.删除event 四.查询Event信息 navicat创建MySql ...

  2. kettle工具下载、安装、数据迁移、定时任务详解

    kettle工具下载.安装.数据迁移.定时任务详解 篇幅有点长,将这五个内容放在了一篇文章里,其中最主要的是数据迁移和定时任务 目录 目录 一.简单介绍 二.下载 三.安装 四.数据迁移:包括单表整体 ...

  3. Laravel5.5源码详解 -- Laravel-debugbar及使用elementUI-ajax的注意事项

    Laravel5.5源码详解 – Laravel-debugbar 及使用elementUI - ajax的注意事项 关于laravel对中间件的处理,请参中间件考另文, Laravel5.5源码详解 ...

  4. Spring整合Schedule定时任务详解

    Spring整合Schedule定时任务详解 Spring 定时任务官方网站 一.概述 用Spring,就是为了简单. 但是我还是要总结下java定时任务实现的几种方式. 1.TimerTask,等于 ...

  5. Linux的定时任务详解

    Linux的定时任务详解 文章目录 一 什么是定时任务? 二 控制定时任务 三 crontab命令 四 实际运用定时任务 五 会遇到的问题及解决方法 5.1 权限问题 5.2 脚本注意问题 一 什么是 ...

  6. Linux中实现定时任务详解

    一.at命令 1.at服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service atd start //启动服务 service atd stop //关 ...

  7. Python APScheduler 定时任务详解

    目录 一.基本概念 1.1. 触发器:triggers 1.2.作业存储器:job stores 1.3.执行器 executors 1.4.调度器 schedulers 二.调度器详解 2.1.AP ...

  8. Java之定时任务详解

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 在 ...

  9. Linux下Python脚本自启动与定时任务详解

    这篇文章主要给大家介绍了关于Linux下Python脚本自启动与定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值. 前言 最近同事问了一个关于P ...

最新文章

  1. 在不影响配置下,清除netscreen密码
  2. 用pandas.dataframe 的append()方法时候,合成的整个数据的索引是分块的
  3. 美专家:中国的机器人优势所引发的忧虑
  4. js代码(经典+有用+常用)
  5. libreportparam2.dll无法继续执行代码_Java并发系列番外(1)——让Thread#stop方法无法终止你的线程...
  6. vue教程4:自定义组件的使用
  7. MPU6050开发 -- 进阶之I2C/SPI通信协议
  8. 线段树 区间更新模板
  9. C4D合集灵感|时尚潮流色彩、搭配梦幻C4D元素设计
  10. 开源彻底改变了世界,但需要关注云和开源这 5 件事
  11. 计算机一级考试第一套题电子表格,计算机等级考试一级上机试题(第一套)
  12. Java Collection框架入门
  13. 最新Axure激活码
  14. Spring核心原理
  15. windirstat怎么用_使用WinDirStat分析和管理硬盘空间
  16. 明日方舟如何在电脑上玩 明日方舟模拟器教程
  17. 源码编译Redis Desktop Manager参考
  18. 如何升级php到最新版本_如何将PHP升级到最新版本
  19. IDA Pro与x64dbg联动调试记录
  20. 冰蝎3 冰蝎2 behinder流量分析 流量解密

热门文章

  1. python类的函数_python 类函数
  2. 视频防抖 Opencv
  3. windows按照sqlite笔记
  4. face track
  5. torch.mean
  6. hard_negative_mining
  7. pyqt5 子线程更新ui
  8. python ‘float‘object is not iterable
  9. java 窗口锁定_使用Java锁定屏幕
  10. 计算机应用基础 黄国兴 研读,《计算机应用基础》大纲解读黄国兴