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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
php你的验证码安全码?
Jan 02 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
用PHP为SHOPEX增加日志功能代码
Jul 02 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
浅析php原型模式
Nov 25 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP代码加密的方法总结
Mar 13 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中文竖排转换实现方法
2015/10/23 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
Python devel安装失败问题解决方案
2020/06/09 Python
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
木工主管岗位职责
2013/12/08 职场文书
职工运动会邀请函
2014/01/19 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
小学德育工作总结2015
2015/05/12 职场文书
怎样写家长意见
2015/06/04 职场文书
让世界充满爱观后感
2015/06/10 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技