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
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
PDO::lastInsertId讲解
Jan 29 PHP
PHP CURL使用详解
Mar 21 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建立外键
2006/11/25 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
如何离线执行php任务
2017/02/21 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
页面使用密码保护代码
2013/04/10 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
vue实现搜索过滤效果
2019/05/28 Javascript
React实现全选功能
2020/08/25 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python自定义异常实例详解
2017/07/11 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
jupyter notebook 多行输出实例
2020/04/09 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
通信研究生自荐信
2014/02/01 职场文书
交通事故协议书
2014/04/15 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
市场总监岗位职责
2015/02/11 职场文书
python编写五子棋游戏
2021/05/25 Python