fixmint
KO

cron 표현식 읽는 법: 다섯 개 필드를 하나씩 해석하기

지은이: · · 5분 읽기

cron 표현식은 작업을 언제 실행할지 알려 주는 짧은 한 줄의 텍스트예요. 보통 공백으로 구분된 다섯 개 필드로 이루어져요. 분, 시, 일, 월, 요일 순서예요. 0 9 * * 1-5 줄은 월요일부터 금요일까지 오전 9시를 뜻해요. 각 필드는 숫자, 이름, 목록, 범위, 간격 중 하나이거나, 모든 값을 뜻하는 *이에요. 모든 필드가 맞는 시점마다 작업이 실행돼요.

Cron 표현식 해석기Cron이 엉뚱한 시간에 실행돼요무료로 사용하기

다섯 개 필드

필드허용 값예시
분0~5930은 매시 30분이에요
시0~239는 24시간제로 09:00이에요
일1~3115는 15일이에요
월1~12, 또는 JAN~DEC3 또는 MAR은 3월이에요
요일0~6, 또는 SUN~SAT0 또는 SUN은 일요일, 1은 월요일이에요

일부 시스템은 일요일을 7로도 받아들이지만 모든 시스템이 그렇지는 않으니, 0 또는 SUN을 쓰세요. 이 형식의 cron에는 초 필드가 없어서 가장 작은 간격은 1분이에요.

목록, 범위, 간격, 이름

  • 는 해당 필드의 모든 값을 뜻해요. * * * *은 1분마다 실행돼요.
  • 목록은 쉼표를 써요. 0 9,17 * * *은 매일 09:00과 17:00에 실행돼요.
  • 범위는 하이픈을 써요. 요일 필드의 1-5는 월요일부터 금요일까지를 뜻해요.
  • 간격은 슬래시를 써요. 분 필드의 */15는 0, 15, 30, 45분을 뜻해요. 10-30/5는 10, 15, 20, 25, 30분을 뜻해요.
  • MON-FRI 같은 이름을 숫자 대신 쓸 수 있어요. 스케줄러가 받아들인다면 읽기가 더 쉬워요.

이 부분들은 함께 조합할 수 있어요. 0 8-18/2 * * *은 08:00부터 18:00까지 두 시간마다 정각에 실행돼요.

자주 쓰는 일정

표현식의미
* * * * *1분마다
/15 * * *15분마다
0 * * * *매시 정각
0 2 * * *매일 02:00
0 9 * * 1-5월요일~금요일 09:00
0 9,17 * * *매일 09:00과 17:00
30 6 1 * *매월 1일 06:30
0 0 * * 0매주 일요일 자정
0 0 1 1 *1월 1일 자정
/5 9-17 * 1-5월요일~금요일 09:00부터 17:55까지 5분마다

0 0 * * 은 자정, 0 12 * *은 정오라는 점을 기억하세요. 시각을 잘못 적는 것이 가장 흔한 실수 중 하나예요.

일과 요일

일 필드와 요일 필드를 둘 다 제한하면, 두 필드 중 하나라도 맞을 때 작업이 실행돼요. Vixie cron과 그에서 파생된 많은 시스템의 고전적인 규칙이에요. 그래서 0 0 13 * 5은 매월 13일 자정에도, 매주 금요일에도 실행돼요. 사람들은 보통 13일이 금요일인 날에만 실행되기를 기대하지만, 계획보다 더 많이 실행되는 결과가 나와요.

두 필드 중 하나가 *이면, 나머지 필드만 적용돼요. 13일이 금요일인 날에만 실행하려면, 모든 금요일에 작업을 등록한 뒤 스크립트 안에서 날짜를 확인하세요. 일부 클라우드 서비스를 포함한 다른 스케줄러는 다른 규칙을 쓸 수 있으니, 해당 문서를 확인하세요.

시간대와 일광 절약 시간

cron은 실행되는 기계나 서비스의 시계, 보통은 그 기계의 현지 시간대를 기준으로 실행돼요. 02:30으로 설정한 작업은 그 시계의 02:30에 실행돼요. 먼저 시간대를 확인하세요(리눅스에서는 date로 볼 수 있어요). 모든 곳에서 같은 시계를 따르게 하려면, 많은 팀이 서버를 UTC로 운영하고, 일부 스케줄러는 작업마다 시간대를 지정할 수 있게 해 줘요.

일광 절약 시간제는 1년에 두 번 시계를 바꿔요. 봄에는 많은 지역이 02:00에서 바로 03:00으로 넘어가서, 02:30 작업은 실행될 시간이 없어요. 가을에는 01:00부터 01:59까지의 한 시간이 두 번 나와요. 스케줄러마다 이런 경우를 다르게 처리해요. 작업을 건너뛰는 경우도 있고, 한 번만 실행하는 경우도 있고, 두 번 실행하는 경우도 있어요. 차이가 중요하다면, 이 시각 변경 구간을 피해 작업을 잡거나 UTC를 쓰세요.

여섯 개 필드와 Quartz

일부 스케줄러는 맨 앞에 초 필드를 추가해요. 그래서 /10 * * * *은 10초마다 실행돼요. 자바용 Quartz 스케줄러는 초, 분, 시, 일, 월, 요일, 그리고 선택적 연도를 쓰고, 특수 문자 네 개를 추가로 써요.

  • ?는 "특정 값 없음"을 뜻해요. Quartz는 일 필드나 요일 필드 중 설정하지 않은 쪽에 이 값을 반드시 써야 해요.
  • L은 마지막을 뜻해요. 일 필드의 L은 그 달의 마지막 날이고, 요일 필드의 6L은 마지막 금요일이에요.
  • W는 가장 가까운 평일을 뜻해요. 15W는 15일에 가장 가까운 평일이며, 다른 달로 넘어가지 않아요.
  • #는 몇 번째 요일인지를 뜻해요. 6#3은 세 번째 금요일이에요.

Quartz는 다섯 필드 형식과 요일 번호가 달라요. Quartz의 1은 일요일, 7은 토요일이에요. 그래서 월요일부터 금요일까지는 1-5가 아니라 2-6이에요. 줄을 복사하기 전에 스케줄러가 어떤 형식을 쓰는지 꼭 확인하세요.

자주 하는 실수

  • 분 필드의 */7. 값은 0, 7, 14 … 56까지예요. 다음은 63인데 그런 분은 없으니, 56분 다음 실행은 다음 시각의 0분이에요. 간격은 4분밖에 안 되고, 간격도 고르지 않아요. 5, 10, 15, 30처럼 60을 나누어떨어지는 간격을 쓰세요.
  • 2월 30일. 그런 날짜는 없으니 0 0 30 2 *은 절대 실행되지 않아요. 30일까지만 있는 달의 31일도 마찬가지예요. 두 필드 중 하나라도 맞으면 실행되는 규칙 때문에, 요일 제한이 있으면 다른 날에 실행될 수도 있으니 결과를 꼭 확인하세요.
  • 24시 또는 60분. 범위를 벗어난 값이에요. 대부분의 스케줄러는 저장할 때 거부하지만, 전부 그렇지는 않아요.
  • 초를 기대하는 것. 다섯 필드 형식의 줄은 정각 분 단위로만 실행돼요.
  • cron과 정규 표현식 혼동. cron에서 는 모든 값을 뜻해요. 정규 표현식에서 는 앞의 항목을 반복한다는 뜻이에요. 패턴은 정규식 테스터로 확인하고, cron 줄과는 구분해서 쓰세요.

다음 실행 시각 확인하기

일정을 믿고 쓰기 전에, 줄을 평범한 말로 풀어 읽고 다음 실행 시각을 몇 개 적어 보세요. cron 표현식 해석기가 이 두 가지를 모두 해 주니, 일 과 요일의 OR 규칙이나 이상한 간격을 놓치지 않는 가장 빠른 방법이에요.

빠른 답변

첫 번째 필드는 분인가요, 초인가요?

표준 다섯 필드 형식에서는 분이에요. 여섯 필드를 쓰는 일부 스케줄러만 초를 추가하며, 이때 초는 맨 앞에 와요.

왜 제 작업이 금요일에도, 13일에도 실행되나요?

일 필드와 요일 필드가 둘 다 설정되어 있어서, 둘 중 하나라도 맞으면 작업이 실행돼요. 다른 한쪽만 적용하고 싶다면 그 필드를 *로 바꾸세요.

cron은 UTC를 쓰나요?

기계나 서비스가 UTC로 설정되어 있을 때만 그래요. 그렇지 않으면 그 시스템의 현지 시간대를 써요.

AI 도움을 받아 영어 원문에서 번역했어요.

댓글

    아직 댓글이 없어요. 첫 댓글을 남겨 보세요.

    별점 (선택)

    이메일은 공개되거나 보관되지 않아요.

    Agentic AI in the Browser 표지Agentic AI in the Browser

    브라우저에서 바로 돌아가고 개인정보를 지키는 AI 워크플로의 활용 사례를 담았어요. fixmint가 바탕으로 삼는 '내 기기에서 처리한다'는 같은 원리예요.

    $4.99Gumroad에서 받기영어로 보기