Laravel框架实现定时发布任务的方法


Posted in PHP onAugust 16, 2018

本文实例讲述了Laravel框架实现定时发布任务的方法。分享给大家供大家参考,具体如下:

背景:需要每隔一小时新建一个任务

http://laravelacademy.org/post/8484.html

Laravel官方自带这个功能,需要利用到Linux系统的cronTab功能。

1、利用Linux的cronTab功能

(1)进入Linux服务器环境,命令行输入

crontab -e

这样就直接进入了服务器下的/var/spool/cron/root文件。如果/var/spool/cron/下还没有root文件,输入上面那个命令就会自动新建root文件了。

(2)先进入文件编辑模式,在root文件中输入

* * * * * /usr/local/php/bin/php  /opt/xxx/xxx/artisan  schedule:run 1>> /dev/null 2>&1

前面第一个目录是php在服务器上的位置,如果不清楚,可以命令行输入which php自行查看然后修改。

第二个目录是你的laravel项目的存放位置,就是artisan文件所在的根目录

2、然后在laravel项目目录下新建任务,命令行输入

php artisan make:command SendTask

然后发现在app/Console/Commands路径下多了一个SendTask.php的文件

自定义这个文件的$signature(等会儿要跟app/Console/Kernel.php文件中的command里面的名称对应,比如我写的是task:send)$description(对这个任务的描述)handle()方法中是这个定时任务的主要逻辑代码。

3、然后修改app/Console/Kernel.php文件

在$commands里要增加刚刚的任务的存放路径;要同时执行多个任务时,将要同时执行的任务的class加入到$commands

protected $commands = [
\App\Console\Commands\SendTasks::class,
\App\Console\Commands\SendTaskEveryDay::class,
\App\Console\Commands\SendTaskEveryWeek::class,

schedule里面是定时执行的核心代码:可以自己直接在里面写要执行的任务的内容,也可以调用新建的command里的任务执行内容。后面就是说明执行任务的频次。

protected function schedule(Schedule $schedule)
{
//  $schedule->call(function () {
//   Task::create(['title' => '发送定时任务']);
//  })->everyMinute();
//调用artisan
// $schedule->command('tasks:send')->hourly();
$schedule->command('tasks:send')->cron('0 */2 * * *');
$schedule->command('tasks:everyday')->dailyAt('09:00');

其实到这里已经是可以执行发布定时任务的期待了,但是我希望可以传参到这个定时任务里面去,因为每次的任务内容不一样,需要达到可以自定义的效果。在这里纠结了很久,还尝试了修改handle()方法,修改成为handle($data),然后在要发布定时任务的时候调用这个handle()方法,然后将参数通过$data传过来,但是发现一旦handle()里面带参数之后定时任务就不能执行了,具体原因不知道,但是这个思路明显就是错了。

最后走了很多弯路,想到一个办法,不能从外部传参进去,就在方法里面把参数查出来。我想要的效果就是:新建一个任务,然后这个新建的任务需要每隔1小时自动新建一次。

想到的解决办法就是在handle()方法里面用sql语句或者查询构造器先把新建的那个定时任务查出来,然后将这个任务再新增一次。暂时能想到的就是这个办法,起码可以达到我想要的效果了。

$cron=Task::where('type', 'xxx')
 ->first();
$cronTab=$cron->jsonSerialize();
$task= Task::create($cronTab);

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP删除数组中空值的方法介绍
Apr 14 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
php检查页面是否被百度收录
Oct 28 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
PHP浮点比较大小的方法
Feb 14 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 #PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 #PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 #PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 #PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 #PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 #PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 #PHP
You might like
example1.php
2006/10/09 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
JavaScript 调试器简介
2009/02/21 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
js时间控件只显示年月
2017/01/08 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python重新加载模块的实现方法
2018/10/16 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
红旗团支部事迹材料
2014/01/27 职场文书
妈妈活动方案
2014/08/15 职场文书
报名委托书
2015/01/29 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Python实现双向链表基本操作
2022/05/25 Python