• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Laravel框架实现定时发布任务的方法

    本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • Laravel实现定时任务的示例代码
    • 源码分析 Laravel 重复执行同一个队列任务的原因
    • Laravel中任务调度console使用方法小结
    • Laravel框架数据库CURD操作、连贯操作总结
    • Laravel框架表单验证详解
    • Laravel框架中扩展函数、扩展自定义类的方法
    • 跟我学Laravel之快速入门
    • Laravel框架路由配置总结、设置技巧大全
    • Laravel中使用FormRequest进行表单验证方法及问题汇总
    • Laravel框架定时任务2种实现方式示例
    上一篇:Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
    下一篇:php实现的rc4加密解密类定义与用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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