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 相关文章推荐
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
浅谈discuz密码加密的方式
May 22 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php写app用的框架整理
Sep 29 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
js实现文字截断功能
2016/09/14 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
jQuery实现日历效果
2020/09/11 jQuery
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python多线程原理与用法详解
2018/08/20 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
详解Python是如何实现issubclass的
2019/07/24 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
财务管理专业推荐信
2013/11/19 职场文书
自荐书模板
2013/12/19 职场文书
党务公开方案
2014/05/06 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
解放思想演讲稿
2014/09/11 职场文书
师德师风自查材料
2014/10/14 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
2015年预算员工作总结
2015/05/14 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers