print( sjw.iq == 200) output : true

[Laravel] Laravel Scheduler 본문

PHP

[Laravel] Laravel Scheduler

sjwiq200 2020. 3. 18. 01:16
728x90
반응형

이전에는 crontab을 사용할 때,

필요한 API들을 여러 개 설정해놓았었습니다.

 

그런데 서버가 날라가는 일이 한번 발생했는데

 

몇개의 API가 셋팅 되어 있는지 메모를 해두지 않아 시간을 조금 허비했던 적이 있습니다.

 

그래서 laravel 자체에서 스케쥴러를 관리하면 좋을 것 같아 해당 포스팅을 합니다.

 

우선 아티잔 명령어를 통해서 스케쥴러를 관리하는 법에 대해 포스팅 하겠습니다!

 

php artisan make:command PointExpireCheck

해당 명령어를 사용하게 되면

 

/app/Console/Commands 밑에 해당 command 가 생깁니다.

 

 

 

그리고 해당 php를 둘러보면

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

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

    /**
     * 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 mixed
     */
    public function handle()
    {
        //
    }
}

$signature 는 콘설 커맨드 네임을 입력해시면 되고

$description은 말 그대로 설명을 써주시면 됩니다.

 

그리고 handle 함수에 스케쥴러에서 구현하고 싶은 부분을 작성하시면 됩니다.

 

 

/app/Console 하위에 있는 Kernel을 보면

<?php

namespace App\Console;

use App\Console\Commands\DormancyUser;
use App\Console\Commands\PointExpireCheck;
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 = [
        //
        PointExpireCheck::class,
    ];

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

        // * * * * * php artisan schedule:run >> /dev/null 2>&1
        $schedule->command('point:check')->daily();
    }

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

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

$commands 변수에 해당 커맨드 클래스를 넣어주고

 

 

다음과 같이 되어 있는데 schedule 함수에 다음과 같이 구현해 주면 됩니다.

크론탭 주기에 대해서는 공식 문서를 참고하시면 더 많이 알아보실 수 있을 것 같습니다.

 

로컬에서 테스트를 할때는 다음 명령어로 실행해주면 됩니다.

 

php artisan schedule:run

 

 

서버에서 크론탭을 설정해주면 라라벨 스케쥴러가 해당 로직에 따라 구동이 되게 됩니다.

 

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

 

참고: https://laravel.kr/docs/5.7/scheduling

 

라라벨 5.7 - 작업 스케줄링

라라벨 한글 메뉴얼 5.7 - 작업 스케줄링

laravel.kr

 

728x90
반응형
Comments