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的FTP学习(一)[转自奥索]
Oct 09 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php实现的双向队列类实例
Sep 24 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
PHP闭包函数详解
Feb 13 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
python3使用GUI统计代码量
2019/09/18 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python数字类型math库原理解析
2020/03/02 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
生物制药专业求职信
2014/03/11 职场文书
赔偿协议书范本
2014/04/15 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
Python如何导出导入所有依赖包详解
2021/06/08 Python
JavaScript实现登录窗体
2021/06/22 Javascript
MySQL新手入门进阶语句汇总
2022/09/23 MySQL