Laravel —— batch 实现
很多项目中会用到自动执行脚本的功能,
例如,自动统计上个月的注册用户,定时生成 csv 文件并邮箱发送给客户等等。
Laravel 中的任务调度,可实现定时任务,
结合自定义 artisan 命令,即可实现自动执行自定义脚本。
一、创建命令
1、artisan 创建
php artisan make:command DataCollect --command=data-collect
上面的命令,会在 app/Console/Commands 目录下,自动创建一个命令类 DataCollect。
执行 data-collect 命令就会调用命令类的代码。
2、打开类文件设置 signature 和 description 属性
3、在 handler 方法中编写逻辑。
使用 php artisan data-collect 命令来调试
二、定义 artisan 命令调度
1、在 App\Console\Kernel 类的 schedule 方法中定义所有的调度任务
$schedule->command('data-collect')->monthly();
调度 data-collect 命令,每个月调度一次。
2、设置调度频率、时间限制、环境限制、时区限制
详细设置信息见 Laravel 文档,https://learnku.com/docs/laravel/6.x/scheduling/5169
3、避免任务重复
执行任务时会生成临时锁文件,避免任务重复。
锁文件默认在 24 H 后失效。
自定义过期时间 ->withoutOverlapping(10)
4、任务放到后台执行
有多个任务同时执行时,默认会顺序执行。
把任务放在后台,则可以同时进行 ->runInBackground()
5、任务输出
通常为了记录 batch 执行情况,会写 log 文件。
设置 log 文件位置 ->sendOutputTo($filePath) 、->appendOutputTo($filePath)
batch 执行情况,通过邮箱通知开发者 ->emailOutputTo('foo@example.com')
只在失败的时候送信 ->emailOutputOnFailure('foo@example.com')
6、batch 执行前后执行特定代码
->before(function () {
// 任务即将开始...
})
->after(function () {
// 任务完成...
});
->onSuccess(function () {
// 任务成功...
})
->onFailure(function () {
// 任务失败...
});
三、启动调度器
1、登录服务器,crontab -l 查看设置的定时任务。
2、crontab -e 编辑定时任务。
* * * * * /usr/local/php/bin/php /var/www/jpmt_dev/artisan schedule:run >> /dev/null >&
前面的 * 表示每分钟执行一次
php 表示用 PHP 解析后面的文件,最好写全路径,避免找不到
artisan 表示项目中 artisan 命令的路径
3、编辑好后,就会自动执行上面创建的命令了。
查看 cron log 文件,/var/log/cron
Laravel —— batch 实现的更多相关文章
- PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...
- laravel小抄
原文地址:http://cheats.jesse-obrien.ca/ Artisan // Displays help for a given command php artisan --help ...
- Laravel Cheat 表 http://cheats.jesse-obrien.ca/#
Laravel Cheat Sheet Toggle Code Comments PDF Version Github Laravel 3 Docs Laravel 4 Docs Artisan ph ...
- Laravel API Tutorial: How to Build and Test a RESTful API
With the rise of mobile development and JavaScript frameworks, using a RESTful API is the best optio ...
- 30分钟用 Laravel 实现一个博客
介绍 Laravel 是一款 MVC架构. 目前最流行的 PHP框架. Laravel的优点在于: 丰富的composer类库支持, 优雅的代码, 未来的主流框架(目前市场占有率最高的框架) Lara ...
- TODO:Laravel增加验证码
TODO:Laravel增加验证码1. 先聊聊验证码是什么,有什么作用?验证码(CAPTCHA)是"Completely Automated Public Turing test to te ...
- TODO:Laravel 内置简单登录
TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...
- TODO:Laravel 使用blade标签布局页面
TODO:Laravel 使用blade标签布局页面 本文主要介绍Laravel的标签使用,统一布局页面.主要用到到标签有@yield,@ stack,@extends,@section,@stop, ...
- TODO:搭建Laravel VueJS SemanticUI
TODO:搭建Laravel VueJS SemanticUI Laravel是一套简洁.优雅的PHP开发框架(PHP Web Framework).可以让你从面条一样杂乱的代码中解脱出来:它可以帮你 ...
随机推荐
- nginx yaf需要注意的问题
nginx yaf需要注意的问题 显示视图的方法<pre> $this->getView()->assign(array('pack'=>$return['pack'], ...
- 选redis还是memcache,源码怎么说
转自: https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961272&idx=1&sn=79ad515b01 ...
- [Docker] - 不同容器之间相互访问的实现方式(例如:Client 访问 DB)
部署了两个独立的容器: Container #1 - Web ClientContainer #2 - SQL Server 不同容器间如何互访? 无法从 Container #1 访问到 Conta ...
- Delphi阿里云短信【支持短信发送、短信批量发送和查询短信发送记录】
作者QQ:(648437169) 点击下载➨Delphi阿里云短信 阿里云api文档 [Delphi 阿里云短信]是最新的阿里云短信接口,不是阿里大于短信接口,支持SendSm ...
- Flink WorkCount代码
Flink-scala所需依赖 <properties> <flink.version>1.7.0</flink.version> </properties& ...
- 处女篇:自用C#后端SqlHelper.cs类
自用SqlHelper.cs类,此类来自软谋教育徐老师课程SqlHelper.cs! using System; using System.Collections; using System.Coll ...
- tkinter基础-输入框、文本框
本节内容 了解输入框.文本框的使用方法 利用1制作简易界面 首先明确上面由几个元素组成:该界面由界面标题,输入框.两个按钮.文本框组成. 该界面我们需要实现的功能: 在输入框中输入文字,点击inser ...
- Angular复习笔记5-指令
Angular复习笔记5-指令 在Angular中,指令是一个重要的概念,它作用在特定的DOM元素上,可以扩展这个元素的功能,为元素增加新的行为.本质上,组件可以被理解为一种带有视图的指令.组件继承自 ...
- 换个语言学一下 Golang (9)——结构体和接口
基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,G ...
- Oracle PLSQL数据导出csv的案例
之前项目运维人员碰到一个问题,需要写一个存储过程,把数据导出为csv文件,查了一些资料,帮他写成了一个PLSQL,今天拿出来分享一下,不足之处,欢迎指教. 数据背景: 用到两张表,一张存放单位组织名 ...