cron 표현식은 Linux cron, GitHub Actions, Kubernetes CronJob, AWS EventBridge, 그 외 수십 개의 스케줄러에서 작업 실행 시점을 제어합니다. 문법은 간결하지만 직관적이지 않습니다——0 9 * * 1-5는 참조 자료 없이 한번에 읽기 어렵습니다. 온라인 파서가 표현식을 즉시 평문으로 설명해줍니다.
cron 표현식 구조
표준 cron 표현식은 공백으로 구분된 5개 필드를 가집니다:
┌───────────── 분 (0–59)
│ ┌───────────── 시 (0–23)
│ │ ┌───────────── 일 (1–31)
│ │ │ ┌───────────── 월 (1–12)
│ │ │ │ ┌───────────── 요일 (0–7, 0과 7은 일요일)
│ │ │ │ │
* * * * *
일부 시스템(Quartz, Spring, AWS Lambda)은 초 또는 연도가 포함된 6개 또는 7개 필드 형식을 사용합니다. 파서는 두 변형 모두 처리합니다.
특수 문자
| 문자 | 의미 | 예 |
|---|---|---|
* | 모두 / 매 | * * * * * — 매 분 |
, | 목록 | 1,15 * * * * — 1분과 15분에 |
- | 범위 | 1-5 * * * * — 1분부터 5분 |
/ | 스텝 | */15 * * * * — 15분마다 |
L | 마지막 | 0 0 L * * — 월 말일(비표준) |
# | n번째 요일 | 0 10 * * 1#2 — 2번째 월요일(비표준) |
? | 특정 값 없음 | 일 또는 요일 필드에서 사용(Quartz) |
자주 사용하는 cron 표현식 20개
N분마다
# 매 분
* * * * *
# 5분마다
*/5 * * * *
# 15분마다
*/15 * * * *
# 30분마다
*/30 * * * *
시간별 및 일별
# 매 시 정각
0 * * * *
# 매일 자정 UTC
0 0 * * *
# 매일 오전 9시 UTC
0 9 * * *
# 하루 두 번 — 오전 8시와 오후 8시
0 8,20 * * *
평일 스케줄
# 평일 오전 9시
0 9 * * 1-5
# 매주 월요일 오전 9시
0 9 * * 1
# 월, 수, 금 정오
0 12 * * 1,3,5
# 주말 오전 10시
0 10 * * 0,6
월별 및 분기별
# 매월 1일 자정
0 0 1 * *
# 매월 1일과 15일 자정
0 0 1,15 * *
# 각 분기 첫날 (1월, 4월, 7월, 10월)
0 0 1 1,4,7,10 *
특정 시간
# 새해 첫날 자정
0 0 1 1 *
# 매주 일요일 오전 4시 (유지보수 시간)
0 4 * * 0
# 6시간마다
0 */6 * * *
플랫폼별 주의사항
Linux crontab
표준 5필드 문법. crontab -e로 편집합니다. 타임존은 시스템 타임존입니다.
# 현재 crontab 확인
crontab -l
# crontab 편집
crontab -e
GitHub Actions
UTC 기준 5필드 형식 사용. 부하 시 작업이 몇 분 지연될 수 있습니다:
on:
schedule:
- cron: '0 9 * * 1-5' # 평일 오전 9시 UTC
한국 표준시(KST)로는 UTC+9이므로 한국시간 오전 9시 = UTC 자정(0시)입니다.
AWS EventBridge / CloudWatch Events
첫 번째 위치에 초가 오는 6필드 형식 또는 별도의 “rate 표현식” 사용:
cron(0 9 ? * MON-FRI *)
rate(5 minutes)
?는 일 또는 요일 필드 중 하나(둘 다는 아님)에 필요합니다.
Kubernetes CronJob
표준 5필드 문법. 타임존 필드(spec.timeZone)는 Kubernetes 1.27+에서 사용 가능합니다:
spec:
schedule: "0 9 * * 1-5"
timeZone: "Asia/Seoul"
cron 표현식 빠르게 읽기
이 패턴에 익숙해지세요:
- 앞의
0+ 시 필드 = “그 시의 정각” - 필드의
*= 해당 필드의 “모든 단위” */n= “n단위마다”-로 구분된 두 숫자 = 범위,로 구분된 숫자 = 특정 값 목록
0 9 * * 1-5는: 0분, 9시, 모든 날, 모든 월, 평일 → 평일 오전 9:00.
cron 문제 디버깅
작업이 실행되지 않은 경우 확인사항:
- cron 데몬이 실행 중인가? (
systemctl status cron) - 스크립트가 실행 가능한가? (
chmod +x script.sh) - 스크립트에서 절대 경로를 사용하는가? (cron은
$PATH가 최소한) - crontab을 저장했는가? (
crontab -l로 확인) - 로그 확인:
/var/log/syslog또는/var/log/cron
출력이 사라진 경우: cron은 기본적으로 출력을 이메일로 보냅니다. 로그 파일로 리다이렉트하세요:
0 9 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
타임존 혼란: cron은 시스템 타임존으로 실행됩니다. 명시적 제어를 위해 crontab에 TZ를 설정하세요:
TZ=Asia/Seoul
0 9 * * 1-5 /path/to/script.sh
프로덕션에 적용하기 전에 스케줄을 검증하세요. cron 표현식 파서 사용해보기 →