정기적으로 반복해야할 함수가 있다면 node-schedule
을 통해 구현할 수 있다.
비슷한 기능을 가진 모듈로는 crone
, toad-scheduler
, agenda
등의 비슷한 기능을 가진 모듈도 있다고 한다.(써보진 않음)
"이 함수를 5분마다 실행시켜줘!"라고 한다면 toad-scheduler
가 더 나을 수도 있다.
하지만 "이 함수를 매 달 세번 째 화요일의 매 20분, 50분 마다 실행켜줘"라는 복잡한 일정을 담는다면 node-scheduler
가 우리 요구사항을 더 충족시켜줄 것이다.
사내에서 현재 node-schedule
모듈을 쓰고 있지만, 서버의 꺼짐 유무 등과 같은 상황에 따라 다른 대체재들을 고려해볼 수도 있을 것 같다.
node-schedule
에서 예약하려는 모든 일들을 Job 객체
라 부른다.
Job 객체
는 EventEmiiter
이며, 아래 이벤트들을 실행시킨다.
run
: Job 실행 뒤에 발생하는 이벤트scheduled
: Job이 예약되었을 때의 이벤트canceled
: Job이 실행되기 전 취소되었을 때의 이벤트.error
: Job에 에러가 발생했을 때의 이벤트success
: Job이 성공했을 때의 이벤트npm install node-schedule
포맷은 아래와 같고, * 표시는 all을 의미한다.
물음표 (?)
? ? * * * *
가25 8 * * * *
로 업데이트 되고 다시 시작할 때까지 매일 이 시간에 실행된다.슬래시 (/)
*
하이픈 (-)
퍼센트 (%)
%
이후의 모든 데이터는 표준 입력으로 명령에 전송된다.const schedule = require('node-schedule');
const j = schedule.scheduleJob('10 * * * * *, function() {
console.log("매 10초마다 실행");
});
const schedule = require('node-schedule');
const j = schedule.scheduleJob('* 8 * * 5#3', function() {
console.log("매 셋째 주 금요일 8시마다 실행");
});
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에 실행");
});
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에 실행');
});
j.cancel();
그 외에도 여러가지 식이 있는데 아마 대부분 위의 룰에서 쓰지 않을까 싶다.
더 자세한 룰은 npm 공식 페이지를 통해 확인이 가능하다.
매 10초마다 하려면 */10 로 해야합니다.