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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
destoon数据库表说明汇总
Jul 15 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 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
PHP个人网站架设连环讲(三)
2006/10/09 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
任意位置显示html菜单
2007/02/01 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
建筑工地宣传标语
2014/06/18 职场文书
论文答辩开场白大全
2015/05/27 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
Go使用协程交替打印字符
2021/04/29 Golang
Hive HQL支持2种查询语句风格
2022/06/25 数据库