laravel任务调度

Posted 微笑的死神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel任务调度相关的知识,希望对你有一定的参考价值。

一、解决问题:取消服务器多cron调用,使用一个cron就可以完成laravel全部commands下的命令
二、操作方法
1、新建command文件:这里新建两个定时任务,模拟多任务
php artisan make:command UpdateArticle
php artisan make:command delArticle
2、文件对应内容
1)UpdateArticle定时任务中内容

<?php

namespace App\\Console\\Commands;

use Illuminate\\Console\\Command;

class UpdateArticle extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = \'UpdateArticle\';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = \'更新相似文章\';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        //操作逻辑
        var_dump(\'更新相似文章成功\'.date("Y-m-d H:i:s"));
        //模拟执行时间
        sleep(80);
    }
}

2)DelArticle定时任务中内容

namespace App\\Console\\Commands;

use Illuminate\\Console\\Command;

class delArticle extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = \'DelArticle\';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = \'Command description\';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        var_dump("删除文章成功");
    }
}

3、shechdule中添加UpdateArticle、DelArticle命令

namespace App\\Console;

use Illuminate\\Console\\Scheduling\\Schedule;
use Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \\App\\Console\\Commands\\UpdateArticle::class
    ];

    /**
     * Define the application\'s command schedule.
     *
     * @param  \\Illuminate\\Console\\Scheduling\\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        //输出日志保存位置
        $logPath = \'D:\\wwwroot\\laraveldemo\\app\\Console\\log.txt\';
        //修改文章demo
        $schedule->command(\'UpdateArticle\')->everyMinute()->appendOutputTo($logPath)->onOneServer()->withoutOverlapping(\'10\');
        //修改文章demo
        $schedule->command(\'DelArticle\')->everyFiveMinutes()->appendOutputTo($logPath)->onOneServer()->withoutOverlapping(\'10\');

    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.\'/Commands\');

        require base_path(\'routes/console.php\');
    }
}

4、定时任务执行schedule:run方法
1)window手动模拟

D:\\wwwroot\\laraveldemo>php artisan schedule:run

2)服务器定时任务

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

5、schedule:run执行中会出现的情况
1)提示 No scheduled commands are ready to run.
出现这个情况是添加withoutOverlapping()造成的,删除 /storage/farmework/chache 文件夹下面的缓存就可以了,如果缓存用的是Redis等,则需要删除其对应的缓存

以上是关于laravel任务调度的主要内容,如果未能解决你的问题,请参考以下文章

laravel 任务调度-即定时任务使用

Laravel 计划任务(任务调度)的使用

Laravel 计划任务(任务调度)的使用

laravel任务调度

laravel5.5 任务调度 (转载)

laravel总结——任务调度