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

1.首先命令生成,你的commands

php artisan make:command SyncMddPics
该命令会在Commands目录下生成SyncMddPics.php文件

2.在生成的文件SyncMddPics,按照要求写填写你的项目需要的配置

class SyncMddPics extends Command
{
   
    protected $signature = 'sync:pics {begin=0} {end=0}(自定义)';

    protected $description = '同步目的地图片数据(自定义)';

    protected $service;

    public function __construct(SyncPicService $syncPicService)
    {
        parent::__construct();
        $this->service = $syncPicService;
    }

   
    public function handle()//这里填写你需要执行的定时任务
    {
        //图片默认的查询条件
        //根据当前时间戳获取前一天的时间
        $begin = $this->argument('begin',0);
        $end = $this->argument('end', 0);

        $begin = !empty($begin) ? $begin : strtotime(date("Y-m-d"),time()-1);
        $end = !empty($end) ? $begin : $begin + 60*60*24;

        $this->service->toSync($begin, $end);
    }
}

3.第三部就是配置你的Kernel文件了,需要把这个命令,一级改命令执行时间做出以下配置

class Kernel extends ConsoleKernel
{
   
    protected $commands = [
   //这里填写你的命令类
        SyncMddPics::class
    ];


    protected function schedule(Schedule $schedule)
    {
        //深夜两点更新数据库前一天新增游记中图片的提取
        $schedule->command('sync:pics --force')->daily()->at('02:00');
    }


    protected function commands()
    {
        require base_path('routes/console.php');
    }
}

4.接下来你需要在你的服务器里面定义一个定时任务,执行上述命令

终端执行:crontab -e

然后添加一行命令: php /www/wwwroot/laravel55/artisan schedule:run.....这条命令每分钟执行一次,然后遍历你的schedule是否有可执行任务(执行是根据你设定的时间来),但是一般情况下,可以直接在服务器上面添加 php artisan sync:pics命令执行,这个命令的执行时间你自己来设定(中间加粗部分是你的项目路径)

修改好保存,最后:corntab installing new corntab

(如果你是windows开发,可以直接在Terminal里面执行,PHP artisan sync:pics)看是否执行成功

5.查看日志看自己的调度任务是否执行成功

猜你喜欢

转载自blog.csdn.net/cfun_goodmorning/article/details/82148738