개발 노트

일정한 시간 마다 실행 본문

카테고리 없음

일정한 시간 마다 실행

관리자 2023. 5. 10. 18:45

Jobs and Scheduling


node-schedule에서 예약하려는 모든 일들을 Job 객체라 부른다.
Job 객체는 EventEmiiter이며, 아래 이벤트들을 실행시킨다.

  • run : Job 실행 뒤에 발생하는 이벤트
  • scheduled: Job이 예약되었을 때의 이벤트
  • canceled: Job이 실행되기 전 취소되었을 때의 이벤트.
    "L"이 하나라는 걸 주의하자
  • error: Job에 에러가 발생했을 때의 이벤트
  • success: Job이 성공했을 때의 이벤트

설치


npm install node-schedule

 

시간 설정 방식


포맷은 아래와 같고, * 표시는 all을 의미한다.

 

기호의 의미


node-schedule에서 지원이 되지않는 `W`, `L`, `#`은 생략한다.

  • 물음표 (?)
    day-of-month 또는 day-of-week 중 하나를 공백으로 남겨둘 때 사용한다. 어떤 곳에서는 cron 데몬의 시동 시간으로 정의되어, 오전 8시 25분에 시작된다면 ? ? * * * *가
    25 8 * * * *로 업데이트 되고 다시 시작할 때까지 매일 이 시간에 실행된다.

 

  • 슬래시 (/)
    슬래시를 간격과 결합하여 간격 값을 지정할 수 있다. 예를 들어, 분 필드의 * / 5 는 5 분마다 나타낸다.

 

  • *
    모든 값을 의미한다.

 

  • 하이픈 (-)
    하이픈은 범위를 정의한다. 예를 들어 2000-2010년은 2000년에서 2010년 사이의 모든 연도를 나타낸다.

 

  • 퍼센트 (%)
    백 슬래시() 이스케이프 하지 않는 한 개행 문자로 변경되어, 첫 번째 %이후의 모든 데이터는 표준 입력으로 명령에 전송된다.

 

예시


1. 매 10초마다 실행되는 스케줄

const schedule = require('node-schedule');

const j = schedule.scheduleJob('10 * * * * *, function() {
	console.log("매 10초마다 실행");
});

 

2. 매 셋째 주 금요일 8시마다 실행되는 스케줄

const schedule = require('node-schedule');

const j = schedule.scheduleJob('* 8 * * 5#3', function() {
	console.log("매 셋째 주 금요일 8시마다 실행");
});

 

3. Date 기반 표현(crone의 역순)

const schedule = require('node-schedule');
const date = new Date(2012, 11, 21, 5, 30, 0);
const j = schedule.scheduleJob(date, function() {
	console.log("2012-11-21, 05:30에 실행");
});

 

4. Recurrence Rule 기반 표현

const schedule = require('node-schedule');
const rule = new schedule.RecurrenceRule();

// 배열 방식
rule.dayOfWeek = [0, 1, 2];
rule.hour = 17;
rule.minute = 0;

const job = schedule.scheduleJob(rule, function(){
  console.log('배열방식: 일요일, 월요일, 화요일 17:00에 실행');
  
// 객체 방식
const job = schedule.scheduleJob({hour: 17, minute: 0, dayOfWeek: [0, 1, 2]}, function(){
  console.log('객체방식: 일요일, 월요일, 화요일 17:00에 실행');
});
  • RecurrenceRule 프로퍼티
    - second (0-59)
    - minute (0-59)
    - hour (0-23)
    - date (1-31)
    - month (0-11)
    - year
    - dayOfWeek (0-6) Starting with Sunday
    - tz

4. Job 종료

j.cancel();