美文网首页
Laravel 定时任务调度

Laravel 定时任务调度

作者: __o__o | 来源:发表于2018-07-03 15:39 被阅读0次
    1. 定义调度
      你可以在App\Console\Kernel类的schedule 方法中定义所有调度任务。在开始之前,先看看一个调度任务的例子。在该例子中,我们将计划在每天午夜调用一个 Closure。在这个 Closure 中,将执行一个数据库查询来清除一个表:
    <?php
    namespace AppConsole;
    use DB;
    use IlluminateConsoleSchedulingSchedule;
    use IlluminateFoundationConsoleKernel as ConsoleKernel;
    
    class Kernel extends ConsoleKernel
    {
        protected $commands = [
           \App\Console\Commands\Inspire::class,
        ];
    
        /**  * 定义应用的命令调度
         *  * @param  IlluminateConsoleSchedulingSchedule  $schedule
         * @return void
         */
        protected function schedule(Schedule $schedule)
        {
            $schedule->call(function () {
                DB::table('recent_users')->delete();
            })->daily();
        }
    }
    
    1. 启动调度器
      需要在linux服务器上用root身份登录,使用 crontab -e 命令,或者
      vim /var/spool/cron/root将以下 Cron 项目添加到服务器。
      注意,php和调度的项目路径都必须使用绝对路径:
     * * * * * /usr/local/php72/bin/php /path-to-your-project/artisan schedule:run \>\> /dev/null 2\>&1  
    

    上面这个 Cron 会每分钟调用一次 Laravel 命令调度器。执行 schedule:run 命令时, Laravel 会根据你的调度运行预定任务。

    如果任务多不方便在AppConsoleKernelschedule方法中写,可以使用命令调度

    一、创建 Command 文件
    项目目录下输入命令php artisan make:command TmallCollectCount 即在(app/Console/Commands 下创建了 TmallCollectCount.php 文件)
    并完善 Command 信息

    • 签名
    protected $signature = 'TmallCollectCount';
    
    • 描述
    protected $description = 'tmall collectcounts collect';
    
    • 在 handle() 方法中实现功能(操作数据库只能用DB,不能用ORM)
    public function handle()
    {
        $products= DB::table('tmall_products')-\>get();
        foreach ($products as $product) {
            $collectnum = CollectCount::collectCount($product-\>skuid);
            DB::table('collect_counts')-\>insert(
                ['tproduct_id' =\> $product-\>id, 'collect_count' =\> $collectnum,'count_date'=\>date("Y-m-d H:i:s")]()
            );
       }
    }
    

    二、在 Kernel.php 中注册命令并填写执行计划

    1. 注册命令
    protected $commands = 
        \App\Console\Commands\TmallCollectCount::class,
    ];
    

    2、填写执行计划(每周一凌晨执行统计)

     protected function schedule(Schedule $schedule)
     {
        $schedule-\>command('TmallCollectCount')-\>weekly()-\>mondays()-\>at("00:00:00");
     }
    

    调度周期等详细信息请看laravel 文档:
    https://laravel-china.org/docs/laravel/5.5/scheduling

    可参考文章:

    相关文章

      网友评论

          本文标题:Laravel 定时任务调度

          本文链接:https://www.haomeiwen.com/subject/eofjuftx.html