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新手上路(十四)
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
PHP 常见郁闷问题答解
Nov 25 PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
PHP 编程安全性小结
Jan 08 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
Python文件和目录操作详解
2015/02/08 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
解决Python一行输出不显示的问题
2018/12/03 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
python字典改变value值方法总结
2019/06/21 Python
python批量图片处理简单示例
2019/08/06 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
行政经理岗位职责
2013/11/09 职场文书
高中地理教学反思
2014/01/29 职场文书
写给老婆的检讨书
2014/02/21 职场文书
静心口服夜广告词
2014/03/20 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年租房协议书范本
2014/10/30 职场文书
员工年终考核评语
2014/12/31 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
python绘制云雨图raincloud plot
2022/08/05 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers