본문 바로가기
Framework/Laravel Framework

[Laravel] Window10 사용 시 작업 스케줄러 적용하기

by 원동호 2021. 1. 26.
반응형

라라벨 프레임워크에서는 기본적으로 작업 스케줄러 기능을 제공한다.

 

기본 개념은 아래 document에서 확인할 수 있다.

 

laravel.kr/docs/8.x/scheduling

 

라라벨 8.x - 작업 스케줄링

라라벨 한글 메뉴얼 8.x - 작업 스케줄링

laravel.kr

자사 서비스에 하루 한번 출석체크를 하면 포인트를 받을 수 있는 기능이 있어 매일 자정에 

출석체크 여부를 초기화 할 수 있는 기능이 필요했다.

 

리눅스 서버였다면 cron을 이용해서 간편하게 할 수 있을것 같은데 Windows에서는 작업 스케줄러 

화면에서 cron과 같은 기능을 추가 할 수 있다.

 

아래와 같은 순서로 진행하면 작업 스케줄러를 실행할 수 있다.

 

1. 제어판 -> 관리도구 ->작업 스케줄러 클릭 후 우측의 작업 만들기 클릭

 

2. 본인이 확인할 수 있는 이름과 설명, 서버구성에따라 보안 옵션을 설정한다.

 

3. 트리거 탭 클릭 후 새로 만들기 클릭 후 작업을 설정 한다.

본인은 매일 자정 12시에 실행을 해야 하고 만료해야할 필요가 없기 때문에 설정란만 수정했다.

 

 

4. 동작 탭 클릭 후 새로 만들기 클릭 후 프로그램/스크립트, 인수 추가(옵션)을 입력한다.

프로그램/스크립트 란은 php가 설치되어있는 경로를 선택한다.

EX) D:\xampp\php\php.exe

인수 추가(옵션) 란은 artisan(라라벨프로젝트 디렉토리)이 설치되어 있는 경로를 입력 하고 artisan 명령어를 입력한다.

EX) D:\Laravel_Workspace\test\artisan schedule:run

 

php artisan schedule:run 명령어는 스케줄러를 실행하는 명령어이다.

해당 명령어가 실행되면 app\Console\Kernel.php 의 schedule method가 실행 된다.

 

5. 조건, 설정 탭은 본인의 작업 환경에 따라 선택해 주면 될것 같다.

 

6. 라라벨 스케줄러 설정 app\Console\Kernel.php파일로 진입한다.
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use DB;
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
     * 아래의 schedule method가 스케줄러를 설정하는곳이다.
     * 본인은 test table의 activated컬럼값을 0으로 update되도록 설정했다.
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            DB::table('test')->update(['activated'=>0]);
        });
    }

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

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

 

위와 같이 설정한다면 매일 자정 12시에 한번 test table의 activated 컬럼 값이 0으로 update 된다.

쉽게 보면 작업 스케줄러가 php를 실행시켜 라라벨 스케줄러 명령어를 한번 실행하는것이다.

document를 보면 세부설정 옵션도 많이 있으니 필요한 기능은 추가해서 설정하면 될 것 같다.

 

 

도움이 되셨다면 하트 및 댓글 부탁드립니다♥

 

 

반응형

댓글