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新手上路(九)
Oct 09 PHP
php 缓存函数代码
Aug 27 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
PHP图片上传代码
Nov 04 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
浅析php工厂模式
Nov 25 PHP
php实现面包屑导航例子分享
Dec 19 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
php+websocket 实现的聊天室功能详解
May 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
解析php常用image图像函数集
2013/06/24 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
js实现移动端轮播图
2020/12/21 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Python做简单的字符串匹配详解
2017/03/21 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技