본문 바로가기
프로그래밍/nodejs

모듈 : node-cron

by 한코코 2022. 11. 16.

본문 : node-cron npm 사이트

node-cron 모듈은 GNU crontab 기반의 node.js용 순수 JavaScript의 작은 작업 스케줄러이다 . 이 모듈을 사용하면 전체 crontab 구문을 사용하여 node.js에서 작업을 예약할 수 있다.


설치하기

$ npm install --save node-cron

node-cron과 속성 스케쥴을 가져온다.

let cron = require('node-cron')

cron.schedule(' * * * * * *',()=>{
    console.log('매 분마다 실행');
});

 

 

 

 

 

크론 구문

 # ┌────────────── second (optional)
 # │ ┌──────────── minute
 # │ │ ┌────────── hour
 # │ │ │ ┌──────── day of month
 # │ │ │ │ ┌────── month
 # │ │ │ │ │ ┌──── day of week
 # │ │ │ │ │ │
 # │ │ │ │ │ │
 # * * * * * *

 

 

필드 : 값

  • 초 : 0-59
  • 분 : 0-59
  • 시 : 0-23
  • 일 : 1-31
  • 월 : 1-12 (또는 이름)
  • 요일 : 0-7 (또는 이름, 0 또는 7은 일요일)

 

 

배수값 사용

'초'는 작성하지 않으면 생략되는 필드값인걸 생각해보면, 지금 1,2,4,5가 적혀있는 곳은 '분' 필드다.

1분, 2분, 4분, 5분마다 console.log()가 출력될 것이다.

let cron = require('node-cron');

cron.schedule('1,2,4,5 * * * *', () => {
  console.log('running every minute 1, 2, 4 and 5');
});

 

 

범위 사용

값의 범위도 사용할 수 있다.

let cron = require('node-cron');

cron.schedule('1-5 * * * *', () => {
  console.log('1에서 5까지 매분마다 실행');
});

 

 

단계 사용

단계 값은 '/' 및 숫자가 포함된 범위 다음에 범위와 함께 사용할 수 있다.

'/'는 나눈 몫의 값을 표시한다는 것을 기억해보면 1/2는 몫의 값이 0이므로 아무것도 출력되지 않는다.

하지만 2/2는 몫의 값이 1이므로 값이 생성되고, ('1 * * * *')과 같게 된다. 그러므로 1분에 출력된다.

3/2는 몫이 1이므로 2와 같아서 생략되고, 4/2는 몫이 2가 나와서  ('1,2 * * * *')가 되므로 1분과 2분에 출력될것이다.

결국 '*/2 * * * *'은 2분마다 실행된다.

let cron = require('node-cron');

cron.schedule('*/2 * * * *', () => {
  console.log('2분마다 실행');
});

 

 

이름 사용

월과 요일에는 이름으로 사용할 수도 있다.

let cron = require('node-cron');

cron.schedule('* * * January,September Sunday', () => {
  console.log('1월과 9월의 일요일마다 실행');
});

줄임말로도 사용할 수 있다.

cron.schedule('* * * Jan,Sep Sun', () => {
  console.log('1월과 9월의 일요일마다 실행');
});

 

 

 

 

 

 

 

크론 함수

일정

crona 표현식이 tick할때마다 주어진 작업이 실행되도록 예약한다.

 

인수 : 

  • 표현식 : string - 크론 표현식
  • 함수 : Function - 실행할 테스크
  • 옵션 : Object - 작업 예약을 위한 선택적 구성

 

옵션

  • scheduled : boolean - 생성된 작업이 예약되었는지 여부를 설정하는 값. 기본값은 true
  • timezone : 작업 예약에 사용되는 시간대. IANA time zone database에서 값을 확인하자.
let cron = require('node-cron');

 cron.schedule('0 1 * * *', () => {
   console.log('Running a job at 01:00 at America/Sao_Paulo timezone');
 }, {
   scheduled: true,
   timezone: "America/Sao_Paulo"
 });

 

 

 

 

 

 

ScheduledTask 함수

스케쥴테스크 시작하기

let cron = require('node-cron');

let task = cron.schedule('* * * * *', () =>  {
  console.log('stopped task');
}, {
  scheduled: false
});

task.start();

 

스케쥴테스크 멈추기

let task = cron.schedule('* * * * *', () =>  {
  console.log('will execute every minute until stopped');
});

task.stop();

 

유효성 확인하기

let valid = cron.validate('59 * * * *');
let invalid = cron.validate('60 * * * *');

 

 

 

 

그 외 정보

일반적으로 "fork-and-pull" Git 작업 흐름을 따른다.

  • GitHub에서 repository를 fork하십시오.
  • 사용자가 가진 fork의 branch에 변경 사항을 커밋한다.
  • 변경 사항과 함께 pull request "upstream";
  • 참고: pull request 하기 전에 "upstream"에서 최신폼을 병합해야 합니다!

 

댓글