Laravel 라라벨 스케줄링(Scheduling)하기 with crontab

2022. 9. 15. 10:21· PHP/Laravel
목차
  1. 개요
  2. 스케줄링 
  3. Cron, Crontab

개요

스케줄링이란

서버에다가 특정 시간마다 또는 특정 주기마다 작업을 예약해 놓는 기능을 의미합니다.

라라벨에서는 스케줄링 기능을 지원하고 있습니다.

 

 

스케줄링 

우선 로컬 개발환경에서 1분마다 로그를 찍는 스케줄링을 만들어봅시다.

아래의 코드처럼 수정해 줍시다.

app/Console/Kernel.php

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function(){
            \Log::info("Hi : ".now());
        })->everyMinute();
    }

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

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

여기서 $schedule->call()안에 저는 클로저(익명 함수)를 만들고 내용을 현재 시간을 출력하는 것으로 했습니다.

그리고 everyMinute()를 사용해 매분마다 실행하는 것으로 했죠.

 

이걸 로컬에서 실행시키는 법은 간단합니다.

php artisan schedule:work

 

이제 매분마다 라라벨 로그 파일(storage/logs/laravel.log)에 로그가 쌓이는 것과

커맨드가 올라오는 것을 확인할 수 있습니다.

 

만약 매분이 아닌 다른 시간으로 하고 싶으시면 아래 문서로 들어가셔서 알맞은 함수를 찾으시면 됩니다.

https://laravel.com/docs/9.x/scheduling#schedule-frequency-options

 

Laravel - The PHP Framework For Web Artisans

Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.

laravel.com

 

또한 현재 실행 중인 스케줄링을 확인하고 싶으시면 아래 명령어를 사용하면 됩니다.

php artisan schedule:list

 

Cron, Crontab

위에서 스케줄링이 백그라운드로 돌아가지 않기 때문에 실서버 적용이 어렵습니다.

그 문제를 해결하기 위해 crontab에 등록하도록 합시다.

 

crontab은 리눅스에서 특정 시간마다 특정 작업을 해주는 친구입니다.

즉 스케줄러이죠, 이 crontab에 라라벨 스케줄러를 등록해서 백그라운드에서 사용하는 것입니다.

 

이러면 실서버에서도 스케줄러를 사용할 수 있습니다

저의 경우 홈스테드 환경에서 crontab의 경로는 아래와 같습니다.

sudo vi /etc/crontab

 

이제 아래와 같은 파일 내용을 확인할 수 있습니다.

차례대로 시간, 계정, 명령어입니다, 주석이 되어있으므로 참고하시면 됩니다.

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

우리는 매분 실행되게 할 것이므로 아래와 같은 문장을 넣어줍시다, 프로젝트 경로는 알맞게 수정해 주세요.

*  *    * * *       root    cd /home/vagrant/code/프로젝트명 && php artisan schedule:run >> /dev/null 2>&1

저장 후 아래 명령어를 입력하시면 스케줄러가 크론을 통해 실행이 됩니다.

sudo systemctl restart cron
# 만약 에러가 나면 아래 명령어로
sudo systemctl restart crond.service

아래와 같이 결과를 확인할 수 있으며 php artisan schedule:work 보다 약간의 딜레이가 존재합니다.

저의 경우 2초의 차이가 발생했네요

 

반응형

'PHP > Laravel' 카테고리의 다른 글

[Laravel9] 라라벨 이메일 보내기 with Google SMTP, Markdown  (0) 2022.10.24
Laravel 9 Observer 써보자, 옵저버로 이력(히스토리) 쌓기  (1) 2022.09.23
Laravel9 라라벨 csv 읽어서 저장하기(CSV seeding)  (0) 2022.09.07
Laravel9 이미지 업로드 (with Dropzone) 2부 : Index & Destroy & Ajax  (0) 2022.08.30
Laravel9 이미지 업로드 (with Dropzone) 1부 : Setting & Create & Image Upload  (0) 2022.08.29
  1. 개요
  2. 스케줄링 
  3. Cron, Crontab
'PHP/Laravel' 카테고리의 다른 글
  • [Laravel9] 라라벨 이메일 보내기 with Google SMTP, Markdown
  • Laravel 9 Observer 써보자, 옵저버로 이력(히스토리) 쌓기
  • Laravel9 라라벨 csv 읽어서 저장하기(CSV seeding)
  • Laravel9 이미지 업로드 (with Dropzone) 2부 : Index & Destroy & Ajax
DSeung
DSeung
DSeung
Dev log
DSeung
  • 분류 전체보기 (193)
    • PHP (62)
      • Laravel (31)
      • Error (5)
      • Setting (11)
      • Modern PHP (15)
    • Go Lang (51)
      • Study (30)
      • Algorithm (17)
      • Setting (1)
      • Error (3)
    • Java (11)
      • Spring (3)
      • JSP (0)
      • Error (2)
      • Setting (2)
      • 단축키 (2)
    • JavaScript (6)
      • Modern JavaScript (4)
      • Node (1)
    • Android Kotlin (5)
      • Study (4)
      • Error (1)
    • 컴퓨팅 기술 (12)
      • 데이터베이스시스템 (4)
      • Docker (2)
      • 크롤링 & 스크래핑 (1)
      • API (1)
      • 클라우드 (1)
      • 네트워크 (1)
    • MySQL (7)
    • AWS (1)
    • Git (5)
      • GItLab (1)
      • GitHub (4)
    • 도메인 (2)
      • 안과 (2)
    • 자격증 (7)
      • SQLD (1)
      • 정보처리기사 (6)
    • Mac os (1)
    • 나머지 (13)
      • tistory (1)
      • 기타 (9)
      • 일기 (3)
    • 독서 (10)

인기 글

최근 글

블로그 메뉴

  • 홈
  • 태그
전체
오늘
어제
hELLO · Designed By 정상우.v4.2.0
DSeung
Laravel 라라벨 스케줄링(Scheduling)하기 with crontab
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.