[TIL] cron 표현

유현영·2020년 1월 25일
0

특정 이벤트를 주기적으로 발생시키기 위해서 사용하는 방법은 cron이라는 모듈이다. 유닉스 계열 컴퓨터 운영체제의 시간 기반 Job 스케줄러이다.

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)

특수문자

  • * (별표) - 모든 값을 의미 함
  • , (쉼표) - 여러 목록을 입력할 때 사용함
  • - (하이픈) - 범위를 정할 때 사용
  • ? (물음표) - 대신에 day-of-month 또는 day-of-week 중 하나를 공백으로 남겨 둘 때 사용한다. 어떤 곳에서는 cron 데몬의 시동 시간으로 정의된다. 그래서 cron이 오후 4시 58 분에 시작되면 ? ? * * * *16 58 * * * * 로 업데이트되고 다시 시작할 때까지 매일 이 시간에 실행된다.
  • / (슬래시) - 간격값을 설정함 */5 는 매 5분마다 임을 나타냄
  • month(September)와 week day(Jan) 항목에는 이름이나 약어를 사용할 수 있음

간단한 예제

var cron = require('node-cron');
 
cron.schedule('* * * * * *', function(){
  // 12시 정각마다 Hello를 출력한다.
  console.log('Hello!');
});

참고사이트

해당 syntax를 간단하게 만들어 사용할 수 도 있지만 cronMaker와 같이 사이트를 사용해서 표현식을 만든 뒤에 검증하는 방법을 사용하는 것이 좋을 것 같다.
http://www.cronmaker.com/

profile
오늘보다 더 나은 내일

2개의 댓글

comment-user-thumbnail
2020년 1월 25일

덕분에 글을 읽다가 찾아봤는데, 내용에 참고가 되시라고 코멘트 남겨봅니당

  1. crontab standard syntax 는 최소 단위로 분 밖에 지원하지 않는다고 해요.
    https://en.wikipedia.org/wiki/Cron#CRON_expression

  2. crontab 구현에 따라 six fields 를 지원하지 않는 경우가 있고, 표준은 five fields 라고 합니다
    https://en.wikipedia.org/wiki/Cron#CRON_expression
    https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html

  3. nncron 의 경우 six fields 를 지원하지만. windows 환경에서 가능한 것으로 보여요
    http://www.nncron.ru/download.shtml (설치 파일이 .exe 인걸로 미루어 봤을때)
    (그렇다고 *NIX 환경에서 six fields 가 안된다는건 아닙니다)

덕분에 저도 모르는걸 많이 찾아보게 되었네요. 좋은 글 잘 읽었습니다 🙇‍♂️

1개의 답글