• Laravel定时任务


    1.创建一个自定义的Command

    php artisan make:command Test
    
    • 1

    2.编辑Test.php文件(app/Console/Commands/Test.php)

    <?php
     
    namespace App\Console\Commands;
     
    use Illuminate\Console\Command;
    use Illuminate\Support\Facades\Log;
     
    class Test extends Command
    {
        /**
         * 名称
         * 执行命令 : php artisan Test:command
         * @var string
         */
        protected $signature = 'Test:command';
     
        //描述
        protected $description = 'Command description';
     
        public function __construct()
        {
            parent::__construct();
        }
     
        //执行的业务
        public function handle()
        {
            //调用方法
            $this->run_perform();
            //或者直接书写逻辑
            //Log::info(time().'测试定时任务');
        }
        
        private function run_perform()
        {
    		//逻辑代码
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    3.修改App\Console\Kernel.php

    
     
    namespace App\Console;
     
    use App\Console\Commands\Hello;
    use Illuminate\Console\Scheduling\Schedule;
    use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
     
    class Kernel extends ConsoleKernel
    {
        //应用中自定义的 Artisan 命令,可多个
        protected $commands = [
        ];
     
        //定义计划任务和执行事件
        protected function schedule(Schedule $schedule)
        {
            //每分钟执行一次名称为command:ceshi的任务
            $schedule->command('Test:command')->withoutOverlapping()->everyMinute();$schedule->command(Test::class)->withoutOverlapping()->everyMinute();
            // 工作日(周一至周五) 8 点 至 17 点每小时执行一次
            //$schedule->command(Test ::class)
            //    ->weekdays()
            //    ->hourly()
            //    ->timezone('America/Chicago')
            //    ->between('8:00', '17:00');
        }
     
        protected function commands()
        {
            $this->load(__DIR__ . '/Commands');
     
            require base_path('routes/console.php');
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    调用频率和限制

    方法描述
    ->cron(‘* * * * *’);自定义 Cron 计划执行任务
    ->everyMinute();每分钟执行一次任务
    ->everyFiveMinutes();每五分钟执行一次任务
    ->everyTenMinutes();每十分钟执行一次任务
    ->everyFifteenMinutes();每十五分钟执行一次任务
    ->everyThirtyMinutes();每三十分钟执行一次任务
    ->hourly();每小时执行一次任务
    ->hourlyAt(17);每小时第 17 分钟执行一次任务
    ->daily();每天 0 点执行一次任务
    ->dailyAt(‘13:00’);每天 13 点执行一次任务
    ->twiceDaily(1, 13);每天 1 点及 13 点各执行一次任务
    ->weekly();每周日 0 点执行一次任务
    ->weeklyOn(1, ‘8:00’);每周一的 8 点执行一次任务
    ->monthly();每月第一天 0 点执行一次任务
    ->monthlyOn(4, ‘15:00’);每月 4 号的 15 点 执行一次任务
    ->quarterly();每季度第一天 0 点执行一次任务
    ->yearly();每年第一天 0 点执行一次任务
    ->timezone(‘America/New_York’)设置时区
    ->weekdays();限制任务在工作日执行
    ->weekends();限制任务在周末执行
    ->sundays();限制任务在周日执行
    ->mondays();限制任务在周一执行
    ->tuesdays();限制任务在周二执行
    ->wednesdays();限制任务在周三执行
    ->thursdays();限制任务在周四执行
    ->fridays();限制任务在周五执行
    ->saturdays();限制任务在周六执行
    ->between($start, $end);限制任务在 $start 和 $end 区间执行->hourly()->between(‘7:00’, ‘22:00’);
    ->when(Closure);限制任务在闭包返回为真时执行
    ->environments($env);限制任务在特定环境执行
    ->withoutOverlapping();默认情况下,即使之前的任务实例还在执行,调度内的任务也会执行。为避免这种情况的发生
    ->runInBackground()默认情况下,计划同时运行的多个命令将会顺序执行。若你有长时间运行的命令,这可能导致后续命令的启动时间比预期的更晚。你可以使用 runInBackground 方法让命令在后台运行
    ->onOneServer()你的应用在多台服务器中运行,你可能需要限制某个计划任务仅在单台服务器上运行
    其他的用法可以查看官方文档https://learnku.com/docs/laravel/7.x/scheduling/7492#introduction

    4.执行定时任务
    手动执行某单个任务:

    php artisan Test:command (名称)
    
    • 1

    服务器自动执行:

    1.编辑定时任务:
    
    crontab -e
    
    2.php多版本可以将php改为版本的绝对路径,项目路径
    
     * * * * * php /www/wwwroot/ceshi/artisan schedule:run >> /www/wwwroot/ceshi/test.txt 2>&1
     或不打印日志
     * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
    
    3.重启服务器
    CentOS7方法重启服务
     
     systemctl restart crond.service 
    
     CentOS6方法重启服务
    
     service crond restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    03-JS循环语句
    图数据库:释放关系的力量
    Kafka学习笔记(二)
    【VLN学习内容LIST】
    【力扣】27. 移除元素
    Docker 的 镜像的常用命令
    Android-Firebase合规问题解决方案-详细攻略,debug模式破解难题
    Java基于微信小程序的电影交流平台
    【C++】狗屁不通文章生成器2.0
    Vue框架学习大纲
  • 原文地址:https://blog.csdn.net/qq_36303853/article/details/125801640