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()
    {
        //逻辑代码
    }
}

3.修改App\Console\Kernel.php

<?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');
    }
}

调用频率和限制

方法                     描述
->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.编辑定时任务:

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

此处评论已关闭

[player id="719102"/]