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 相关文章推荐
文件上传类
Oct 09 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP 截取字符串专题集合
Aug 19 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 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
APMServ使用说明
2006/10/23 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
Weblogc domain问题
2014/01/27 面试题
初中数学教学反思
2014/01/16 职场文书
老公爱的承诺书
2014/03/31 职场文书
升职演讲稿范文
2014/05/23 职场文书
心理学专业求职信
2014/06/16 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python