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 相关文章推荐
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
Mac系统下安装PHP Xdebug
Mar 30 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
php的优点总结 php有哪些优点
Jul 19 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配置参数总结
2013/06/14 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
python字符类型的一些方法小结
2016/05/16 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Python远程linux执行命令实现
2020/11/11 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
类如何去实现接口
2013/12/19 面试题
外语系毕业生自荐信范文
2013/12/16 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
大国崛起英国观后感
2015/06/02 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
python中tkinter复选框使用操作
2021/11/11 Python