~ / developer / cron-expression

⏰ 크론 표현식 해석기

크론 표현식을 넣으면 언제 실행되는지 한국어 문장과 다음 실행 시각 10개로 보여 줘요. 아래 표에서 필드를 하나씩 고쳐 직접 만들 수도 있어요.

cron
이렇게 실행돼요
-
options
시간대
형식
fields — 칸을 고치면 위 표현식이 바뀌어요
next 10 runs

사용법

  1. 맨 위 칸에 크론 표현식을 붙여넣으세요. 바로 아래에 "평일(월~금) 오전 9시 0분"처럼 한국어 설명이 나와요.
  2. 다음 실행 10회가 한국 시간(KST)으로 보여요. GitHub Actions·AWS처럼 서버가 UTC 기준이면 시간대를 UTC로 바꿔 확인하세요.
  3. 직접 만들려면 fields 표에서 분·시·일·월·요일 칸을 하나씩 고치거나 칸 아래 버튼(*/15, 1-5 …)을 누르세요. 위 표현식이 함께 바뀌어요.
  4. Spring @Scheduled·Quartz처럼 초까지 쓰는 6자리 표현식은 그대로 넣으면 자동으로 인식해요. 초 필드 사용을 켜면 표에 초 칸이 생겨요.
  5. 잘못된 값은 빨간 글씨로 어느 필드가 왜 틀렸는지 알려 줘요.

크론 표현식 구조

크론(cron)은 리눅스·유닉스에서 정해진 시각에 명령을 자동 실행하는 스케줄러예요. crontab -e로 등록하는 한 줄은 공백으로 나눈 다섯 칸과 실행할 명령으로 이루어져요.

순서필드허용 값이름
(0)초 — 6자리일 때만0-59
1분0-59
2시 (24시간)0-23
3일1-31
4월1-12JAN-DEC
5요일0-7 (0과 7은 일요일)SUN-SAT

특수 문자

기호뜻예시의미
*모든 값* * * * *매분
,여러 값0 9,18 * * *오전 9시, 오후 6시
-범위0 9 * * 1-5평일 오전 9시
/간격*/15 * * * *15분마다 (0, 15, 30, 45분)
a-b/n범위 안 간격0 9-18/3 * * *9시, 12시, 15시, 18시
?지정 안 함 (Quartz)0 0 12 ? * MON* 와 같게 처리

@yearly(=0 0 1 1 *), @monthly(=0 0 1 * *), @weekly(=0 0 * * 0), @daily(=0 0 * * *), @hourly(=0 * * * *) 같은 매크로도 해석해요. Quartz 전용인 L(마지막 날), W(가장 가까운 평일), #(n번째 요일)과 7번째 연도 필드는 표준 크론에 없어서 오류로 알려 줘요.

일과 요일을 둘 다 쓰면? (OR 규칙)

헷갈리기 쉬운 규칙이에요. 리눅스 기본 크론(Vixie cron, cronie)은 일 필드와 요일 필드를 둘 다 지정하면 둘 중 하나만 맞아도 실행해요. 0 0 13 * 5는 "13일의 금요일"이 아니라 매월 13일 그리고 매주 금요일마다 실행돼요. 둘 중 하나가 *로 시작하면 다른 쪽 조건만 적용돼요. 이 도구도 같은 규칙으로 다음 실행 시각을 계산해요.

자주 쓰는 예시

표현식의미
*/5 * * * *5분마다
0 * * * *매시 정각
0 0 * * *매일 자정
30 6 * * *매일 오전 6시 30분
0 9 * * 1-5평일 오전 9시
*/10 9-18 * * 1-5평일 오전 9시~오후 6시 사이 10분마다
0 0 1 * *매월 1일 자정
0 3 * * 0매주 일요일 오전 3시 (백업)
0 0 1 1 *매년 1월 1일 자정

시간대 주의 — GitHub Actions·AWS는 UTC

서버의 크론은 그 서버의 시간대를 따라요. 한국 서버는 보통 KST지만 GitHub Actions의 schedule, AWS EventBridge, Google Cloud Scheduler 기본값, 대부분의 도커 컨테이너는 UTC예요. KST는 UTC보다 9시간 빠르니, 한국 시간 오전 9시에 돌리려면 UTC로 0 0 * * *(자정)을 써야 해요. 시간대를 UTC로 바꿔 놓고 실행 시각을 확인해 보세요. 한국은 서머타임이 없어서 KST는 1년 내내 UTC+9로 일정해요.

요일 번호는 표준 크론 기준(0·7=일, 1=월)이에요. Quartz는 1=일요일, 7=토요일로 달라서 요일을 숫자 대신 MON·FRI 같은 영어 이름으로 쓰면 어느 쪽에서도 안전해요. 다음 실행 시각은 브라우저의 현재 시각을 기준으로 계산하며 서버로 아무것도 보내지 않아요.

자주 묻는 질문

크론 표현식 5자리는 각각 무엇인가요?
왼쪽부터 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7, 0과 7은 일요일)이에요. 예를 들어 30 8 * * 1-5 는 평일 오전 8시 30분이에요. 6자리라면 맨 앞이 초예요.
*/5 와 0/5 는 같은가요?
분 필드에서는 같아요. 둘 다 0분부터 5분 간격(0, 5, 10 … 55분)이에요. 5/15 처럼 쓰면 5분부터 15분 간격(5, 20, 35, 50분)이 돼요. 다만 리눅스 크론은 일·요일 필드가 *로 시작하는지로 OR/AND를 정하니 일 필드에서는 */2 와 1/2 가 다르게 동작할 수 있어요.
GitHub Actions 크론이 9시간 늦게 실행돼요.
GitHub Actions의 schedule은 항상 UTC 기준이에요. 한국 시간 오전 9시에 실행하려면 KST에서 9시간을 뺀 0 0 * * * 을 써야 해요. 또 GitHub는 부하가 많을 때 몇 분~수십 분 늦게 실행하기도 해요.
매월 마지막 날에 실행하려면 어떻게 하나요?
표준 크론에는 마지막 날(L)이 없어요. 0 0 28-31 * * 로 실행하고 명령 앞에 [ "$(date -d tomorrow +%d)" = "01" ] && 처럼 내일이 1일인지 검사하는 방법을 많이 써요. Quartz·Spring에서는 0 0 0 L * ? 를 쓸 수 있어요.
13일의 금요일에만 실행되게 할 수 있나요?
0 0 13 * 5 는 OR 규칙 때문에 매월 13일과 매주 금요일 모두 실행돼요. 13일에 실행되게 한 뒤 명령 안에서 [ "$(date +%u)" = 5 ] && 처럼 요일을 한 번 더 확인해야 해요.
Spring @Scheduled 크론과 리눅스 크론은 무엇이 다른가요?
Spring은 맨 앞에 초가 붙는 6자리예요. 리눅스의 0 9 * * * 은 Spring에서 0 0 9 * * * 로 써요. Spring은 L, W, # 문법도 지원하고 요일은 0·7=일요일로 리눅스와 같아요. 이 도구는 6자리 표현식의 초 필드까지 해석해요.

이 도구와 함께 보면 좋은 글

관련 도구

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →