zoukankan      html  css  js  c++  java
  • Laravel —— batch 实现

    很多项目中会用到自动执行脚本的功能,

    例如,自动统计上个月的注册用户,定时生成 csv 文件并邮箱发送给客户等等。

    Laravel 中的任务调度,可实现定时任务,

    结合自定义 artisan 命令,即可实现自动执行自定义脚本。

    一、创建命令

    1、artisan 创建

    php artisan make:command DataCollect --command=data-collect

      上面的命令,会在 app/Console/Commands 目录下,自动创建一个命令类 DataCollect。

      执行 data-collect 命令就会调用命令类的代码。

    2、打开类文件设置 signature 和 description 属性

    3、在 handler 方法中编写逻辑。

      使用 php artisan data-collect 命令来调试

    二、定义 artisan 命令调度

    1、在 AppConsoleKernel 类的 schedule 方法中定义所有的调度任务

    $schedule->command('data-collect')->monthly();  

    调度 data-collect 命令,每个月调度一次。

    2、设置调度频率、时间限制、环境限制、时区限制

      详细设置信息见 Laravel 文档,https://learnku.com/docs/laravel/6.x/scheduling/5169

    3、避免任务重复

      执行任务时会生成临时锁文件,避免任务重复。

      锁文件默认在 24 H 后失效。

      自定义过期时间 ->withoutOverlapping(10)

    4、任务放到后台执行

      有多个任务同时执行时,默认会顺序执行。

      把任务放在后台,则可以同时进行 ->runInBackground()

    5、任务输出

      通常为了记录 batch 执行情况,会写 log 文件。

      设置 log 文件位置 ->sendOutputTo($filePath) 、->appendOutputTo($filePath

      batch 执行情况,通过邮箱通知开发者 ->emailOutputTo('foo@example.com')

      只在失败的时候送信 ->emailOutputOnFailure('foo@example.com')

    6、batch 执行前后执行特定代码

    ->before(function () { 
        // 任务即将开始... 
    }) 
    
    ->after(function () { 
        // 任务完成... 
    });
    
    ->onSuccess(function () { 
        // 任务成功... 
    }) 
    
    ->onFailure(function () { 
        // 任务失败... 
    });

    三、启动调度器

    1、登录服务器,crontab -l 查看设置的定时任务。

    2、crontab -e 编辑定时任务。

    * * * * * /usr/local/php/bin/php /var/www/jpmt_dev/artisan schedule:run >> /dev/null 2>&1

      前面的 * 表示每分钟执行一次

      php 表示用 PHP 解析后面的文件,最好写全路径,避免找不到

      artisan 表示项目中 artisan 命令的路径

    3、编辑好后,就会自动执行上面创建的命令了。

      查看 cron log 文件,/var/log/cron

  • 相关阅读:
    使用 linux kernel +busybox 定制linux系统
    记一次golang的内存泄露
    关于Queries_per_sec 性能计数器
    NUMA导致的MySQL服务器SWAP问题分析
    Drop Table对MySQL的性能影响分析
    当MySQL数据库遇到Syn Flooding
    tcp_tw_recycle参数引发的数据库连接异常
    一例数据同步异常问题分析
    MySQL大量线程处于Opening tables的问题分析
    MySQL DeadLock故障排查过程
  • 原文地址:https://www.cnblogs.com/rendd/p/11613519.html
Copyright © 2011-2022 走看看