특정 시간에 이벤트 발생시키기 - Node.js

특정 시간에 이벤트를 발생시키는 모듈이 있다.

node-schedule

출처 : https://www.npmjs.com/package/node-schedule

간격 단위마다 이벤트를 발생시키기 위해서는 setInterval() 를 사용하면 된다. 하지만 매월 몇시 몇분에 발생 같은 이벤트를 구현하고 싶을 때 이 모듈을 사용할 수 있다.

설치

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 분마다 나타낸다.

출처 : https://en.wikipedia.org/wiki/Cron#CRON_expression

간단한 예제 - 1

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

const schedule = require('node-schedule');
 
const j = schedule.scheduleJob('10 * * * *', function(){
  console.log('매 10초에 실행');
});

간단한 예제 - 2

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

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();
김땡땡's blog

김땡땡's blog

김땡땡