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设计模式 Delegation(委托模式)
Jun 26 PHP
组合算法的PHP解答方法
Feb 04 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
php商品对比功能代码分享
Sep 24 PHP
php批量删除超链接的实现方法
Oct 19 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
php使用fullcalendar日历插件详解
Mar 06 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
mysql 搜索之简单应用
2007/04/27 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
PHP基础知识介绍
2013/09/17 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
Django框架实现的分页demo示例
2019/05/25 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
文明倡议书范文
2014/04/15 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫