服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - Laravel框架实现定时发布任务的方法

Laravel框架实现定时发布任务的方法

2019-09-11 11:11skyisbluening PHP教程

这篇文章主要介绍了Laravel框架实现定时发布任务的方法,结合实例形式分析了使用Linux的cronTab功能实现定时发布任务的相关设置与操作技巧,需要的朋友可以参考下

本文实例讲述了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教程ThinkPHP中图片按比例切割的代码实例

    ThinkPHP中图片按比例切割的代码实例

    今天小编就为大家分享一篇关于ThinkPHP中图片按比例切割的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    yaohui_h3262019-06-04
  • PHP教程PDO::quote讲解

    PDO::quote讲解

    今天小编就为大家分享一篇关于PDO::quote讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册3242019-06-26
  • PHP教程php提取微信账单的有效信息

    php提取微信账单的有效信息

    这篇文章主要为大家详细介绍了php提取微信账单的有效信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    张高伟2552019-09-04
  • PHP教程Laravel源码解析之路由的使用和示例详解

    Laravel源码解析之路由的使用和示例详解

    这篇文章主要介绍了Laravel源码解析之路由的使用和示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    CrazyCodes1872019-09-05
  • PHP教程PHP简单创建压缩图的方法

    PHP简单创建压缩图的方法

    这篇文章主要介绍了PHP简单创建压缩图的方法,通过自定义函数实现压缩图像的功能,涉及php图片的读取与图形图像的创建相关技巧,需要的朋友可以参考下...

    onestopweb4042019-06-20
  • PHP教程Yii2语言国际化的配置教程

    Yii2语言国际化的配置教程

    这篇文章主要给大家介绍了关于Yii2语言国际化的配置教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    durban2422019-09-11
  • PHP教程php微信分享到朋友圈、QQ、朋友、微博

    php微信分享到朋友圈、QQ、朋友、微博

    这篇文章主要为大家详细介绍了php微信分享到朋友圈、QQ、朋友、微博,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    瞳話cium1922019-06-12
  • PHP教程PHP删除数组中指定值的元素常用方法实例分析【4种方法】

    PHP删除数组中指定值的元素常用方法实例分析【4种方法】

    这篇文章主要介绍了PHP删除数组中指定值的元素常用方法,结合实例形式对比分析了4种常用的数组遍历与元素删除方法,并总结分析了相关算法优缺点,需要的朋友可以参考下...

    dongxie5483402019-09-10