가이드 / cron 표현식

cron 표현식 완전 정리 — 읽는 법, 예시 모음, 함정 4가지

구조: 왼쪽부터 분·시·일·월·요일

cron 표현식 5개 필드
┌───────── 분 (0-59)
│ ┌─────── 시 (0-23)
│ │ ┌───── 일 (1-31)
│ │ │ ┌─── 월 (1-12)
│ │ │ │ ┌─ 요일 (0-7, 0과 7 = 일요일)
│ │ │ │ │
0 4 * * *   →  "매일 4시 0분"

각 자리에 들어갈 수 있는 것: 숫자(4), 전부(*), 목록(1,15), 범위(9-18), 간격(*/5). 이 다섯 가지 조합이 전부입니다.

👉 표현식을 넣고 다음 실행 시각을 바로 확인하려면 cron 표현식 검사기를 써보세요 (가입 불필요).

자주 쓰는 표현식 모음 (복붙용)

표현식의미
* * * * *1분마다
*/5 * * * *5분마다
*/30 * * * *30분마다
0 * * * *매시 정각
0 */2 * * *2시간마다 (짝수 시 정각)
0 4 * * *매일 새벽 4시
30 23 * * *매일 밤 11시 30분
0 9 * * 1-5평일(월~금) 오전 9시
0 10 * * 6,0주말(토·일) 오전 10시
0 0 * * 1매주 월요일 자정
0 6 1 * *매월 1일 오전 6시
0 0 1 1 *매년 1월 1일 자정
0 3 * * 0매주 일요일 새벽 3시
0 8-18 * * *매일 8시~18시 사이 매시 정각
*/10 9-18 * * 1-5평일 근무시간(9~18시)에 10분마다

함정 1 — 요일 0도 일요일, 7도 일요일

요일 필드는 0~7인데 0과 7 둘 다 일요일입니다. 월요일이 1이에요. “일요일=1”로 착각하면 매주 월요일에 도는 배치가 됩니다.

함정 2 — “일”과 “요일”을 같이 쓰면 OR

0 4 13 * 5는 “13일이면서 금요일”이 아니라 “13일 또는금요일”에 돕니다. 표준 cron의 오래된 명세라 대부분의 구현이 이렇습니다. 둘 다 만족할 때만 돌리려면 스크립트 안에서 날짜를 한 번 더 검사하세요.

함정 3 — */N은 “N분마다”가 아니라 “N으로 나눠떨어질 때”

*/15는 0·15·30·45분에 돕니다 — 등록한 시점부터 15분 간격이 아니에요. 그리고 */7처럼 60이 안 나눠지는 값은 0·7·14…56분에 돌고 다음 시 0분으로 점프해서 간격이 들쭉날쭉해집니다.

함정 4 — 그 표현식, 서버 시간대 기준입니다

클라우드 서버는 대부분 UTC라서 0 4 * * *가 한국 오후 1시에 돕니다. 자세한 확인·해결법은 crontab이 안 돌아갈 때 체크리스트 8번 항목을 보세요.

보너스 — Spring의 cron은 필드가 6개

Spring @Scheduled(cron = "0 0 4 * * *")는 맨 앞에 초 필드가 하나 더 있습니다. crontab 표현식을 그대로 붙여넣으면 의미가 한 칸씩 밀려요. Spring Batch 감시는 전용 가이드에 정리해뒀습니다.

표현식은 맞게 썼는데, 정말 그 시각에 돌고 있을까?

cron 표현식이 맞아도 서버 재부팅·권한 변경·시간대 문제로 조용히 안 도는 날이 옵니다. BatchWatch에 같은 표현식으로 모니터를 만들어두면, 예정 시각에 성공 신호가 안 올 때 디스코드·슬랙·텔레그램으로 알림이 갑니다. cron을 모르는 팀원을 위한 “매일 오전 4시” 같은 쉬운 입력도 지원해요.

크론이 안 돌면 5분 안에 알림 받기

구글 계정으로 3초 가입 · 모니터 3개 무료 · 카드 등록 없음

무료로 시작하기 →