개발 => 복습 후 재정리 대기/Node.js

[node-schedule][cron] 특정 시간에 동작하기

장 상 현 2021. 8. 9.

설치

npm install node-schedule

 

Cron 표현식

이 모듈은 Cron 표현식으로 시간을 지정할 수 있다.

*     *    *     *    *     *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

 

특수문자 의미

Cron 표현식에서 사용되는 특수 문자들이 있다.

 

  • * 모든 값을 의미한다.
  • 쉼표 ( ,)
  • 쉼표는 한 항목에 여러 목록을 입력할 때 사용된다. 예를 들어, 5 번째 필드 (요일)에 “MON, WED, FRI”를 사용하면 월요일, 수요일, 금요일을 의미한다.
  • 하이폰 ( -)
  • 하이폰은 범위를 정의한다. 예를 들어 2000-2010 년은 2000 년에서 2010 년 사이의 모든 연도를 나타낸다.
  • 퍼센트 ( %)
  • 명령에서 백분율 기호 (%)는 백 슬래시 ()로 이스케이프 하지 않는 한 개행 문자로 변경되고 첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송된다.

비표준 문자

다음은 비표준 문자이며 일부 cron 표현에만 사용할 수 있다.

 node-schedule에서는 W, L, # 은 지원하지 않는다.

 

  • L
  • ‘L’은 ‘마지막(Last)’을 의미한다. day-of-week 필드에서 사용하면 주어진 달의 “지난 금요일”( “5L”)과 같은 구문을 지정할 수 있다. day-of-month 필드에서는 해당 월의 마지막 날을 지정한다.
  • W
  • W문자는 day-of-month 필드에 사용할 수 있다. 이 문자는 주어진 요일에 가장 가까운 평일 (월 - 금)을 지정하는 데 사용한다. 예를 들어, “15W”를 day-of-month 필드의 값으로 지정하면 의미는 “매월 15 일 가장 가까운 평일”이다. 그래서 15 일이 토요일이라면 14 일 금요일에 이벤트가 발생한다. 15 일이 일요일이면 16 일 월요일에 발생한다. 15 일이 화요일이면 15 일 화요일에 시작한다. 그러나 달의 값으로 “1W”를 지정하고 1 일이 토요일이면 월의 경계는 넘지 않기 때문에, 3일 월요일에 실행된다. W문자는 하루 일만 지정할 수 있고, 목록이나 범위에서는 사용할 수 없다.
  • 해시 (#)
  • #은 요일 필드에 사용할 수 있으며 1에서 5 사이의 숫자가 와야 한다. 주어진 달의 “두 번째 금요일”과 같은 구문을 지정할 수 있다. 예를 들어, 요일 필드에 “5 # 3”을 입력하면 매월 셋째 금요일이 된다.
  • 물음표 (?)
  • *대신에 day-of-month 또는 day-of-week 중 하나를 공백으로 남겨 둘 때 사용한다. 어떤 곳에서는 cron 데몬의 시동 시간으로 정의된다. 그래서 cron이 오전 8시 25 분에 시작되면?? * * * *  25 8 * * * *로 업데이트되고 다시 시작할 때까지 매일 이 시간에 실행된다.
  • 슬래시 ( /)
  • 슬래시를 간격과 결합하여 간격 값을 지정할 수 있다. 예를 들어, 분 필드의 * / 5는 5 분마다 나타낸다.

 

일정 간격

30초마다 실행되는 스케줄

    let test = schedule.scheduleJob("30 * * * * *", function () {
      let mNow = new Date();
      console.log(mNow);
      console.log("30초 간격이 아닌, 30초가 될 때 마다 실행");
    });

 

지정 시간

var j = schedule.scheduleJob('0 17 ? * 0,4-6', function(){
  console.log('일, 목, 금, 토 중 실행 날짜 17시 0분에 실행');
});

// 매월 9월 1일 오후 6시 40분 3초에 시간 로깅
let job = schedule.scheduleJob('3 40 18 12 9 *', function(){
	let mNow = new Date();
    console.log(mNow);
}

 

Date 기반 표현

Cron 기법을 사용하지 않고 싶다면 Date()를 사용해 지정할 수도 있다.

var schedule = require('node-schedule');
var date = new Date(2019, 01, 17, 5, 30, 0);
 
var j = schedule.scheduleJob(date, function(){
  console.log('The world is going to end today.');
});

 

스케줄 취소

등록한 스케줄을 취소하기 위해서는 cancel() 메서드를 사용할 수 있다.

j.cancel();

댓글