定时任务功能的基本使用

定时任务功能的基本使用

前几天体验了 laravel定时任务功能,使用起来很方便。还可以通过预定的方法设置不用的执行周期,接下来说一下基本的定时任务的使用。

打开 App\Console\Kernel 文件,可以看到

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;

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

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule $schedule
     *
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        
    }
}

schedule 方法是定义定时任务执行的关键,可以将所有的定时任务都放在里面。我们可以通过创建 command 来执行定时任务:

在 App\Console\Commands\ 文件夹下创建命令文件,如:ProjectState.php 文件,打开并修改文件:

<?php

namespace App\Console\Commands;

use App\Models\Project;
use Illuminate\Console\Command;

class ProjectState extends Command
{
    //定义command的名称
    protected $signature = 'projectState';
    
    //定义command的描述信息
    protected $description = '修改项目状态';

    //编写任务逻辑相关代码
    public function handle()
    {
        $projects = Project::where('start_at', '<', now()->toDateTimeString())->where('end_at', '>', now()->endOfDay()->toDateTimeString())->where('state', '=', 1)->get();
        foreach ($projects as $project){
            $project->update(['state' => Project::EXECUTING]);
        }
        \Log::info('项目状态修改完成' . now());
    }
}

打开 App\Console\Kernel.php 文件,注册 Command:

protected $commands = [
        Commands\ProjectState::class,
    ];
    
protected function schedule(Schedule $schedule){
        $schedule->command('projectState')->daily();
    }

除了 daily 方法外,控制任务执行的时间间隔还有多种方法:

方法描述
->everyMinute();每分钟执行一次任务
->everyFiveMinutes();每五分钟执行一次任务
->everyTenMinutes();每十分钟执行一次任务
->everyFifteenMinutes();每十五分钟执行一次任务
->everyThirtyMinutes();每三十分钟执行一次任务
->hourly();每小时执行一次任务
->weekly();每周执行一次任务

修改完成后,执行 artisan 命令运行定时任务:

php artisan schedule:run

此时记录已经更改,但是并不是每分钟都执行,需要结合 Crontab 执行定时任务,所以就需要 linux 系统功能的帮助,在命令行下执行 crontab -e

crontab -e

执行完以上的命令之后,会出现一个处于编辑状态的文件,在文件中填入以下内容:

* * * * * php /path/artisan schedule:run >> /dev/null 2>&1

注:path为项目的跟目录路径

然后保存,关闭。这样一来,前面定义的任务就可以不断的按照定义的时间间隔不断的执行,定时任务的功能也就实现了。
任务执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值