cron 식 검사기|해석·다음 실행 일시·일본 시간/UTC 변환(GitHub Actions·EventBridge 지원)
cron 식 검사기는 crontab·GitHub Actions·Kubernetes CronJob·AWS EventBridge·Spring의 @Scheduled cron 식을 붙여넣기만 하면 의미를 풀어서 설명하고, 다음에 실행되는 일시를 일본 시간과 UTC로 나열해 주는 무료 도구입니다. GitHub Actions의 schedule은 UTC로 해석되므로 일본 시간 "평일 9:00"은 "0 0 * * 1-5"가 됩니다. 일본 시간 0~8시가 전날·전 요일이 되는 계산이나 한 줄로 쓸 수 없을 때 두 줄로 나누는 일도 자동으로 하고, 변환 전과 후의 실행 시각이 일치하는지까지 확인합니다. 일과 요일을 둘 다 쓰면 "어느 한쪽"이 되는 점, 분을 *로 하면 한 시간에 60번 실행되는 점, */7이 7분 간격이 되지 않는 점, 31일 지정은 실행되지 않는 달이 있는 점, EventBridge의 ? 누락이나 요일 숫자의 어긋남, crontab 명령의 % 이스케이프 누락 같은 함정도 알려 줍니다. 선택만으로 cron 식을 만드는 빌더와 자주 쓰는 표기의 빠른 참조표도 있습니다.
1. cron 식 붙여넣기
crontab 한 줄, GitHub Actions의 YAML 줄(- cron: '…'), cron(…), @Scheduled(cron = "…")를 그대로 붙여넣어도 읽을 수 있습니다.
어디에서 쓰는 식인가요?
2. 의미(해석)
평일(월~금) 9:00(일본 시간)
| 필드 | 입력한 값 | 의미 |
|---|---|---|
| 분 | 0 | 0분 |
| 시 | 9 | 9시 |
| 일 | * | 모든 일 |
| 월 | * | 모든 월 |
| 요일 | 1-5 | 평일(월~금) |
3. 다음 실행 일시
이 식을 일본 시간(으)로 해석했을 때 실행되는 일시를 일본 시간과 UTC로 나란히 보여 줍니다.
다음 실행 일시를 계산하고 있습니다…
4. 다른 표기로 변환
같은 시각에 실행되도록 다른 서비스의 표기로 바꿨습니다. UTC로 해석되는 GitHub Actions와 EventBridge 규칙은 시차만큼 시각(과 날짜·요일)을 옮겼습니다.
crontab(Linux)
CRON_TZ=Asia/Tokyo 0 9 * * 1-5 /path/to/command
crontab -e로 열어 한 줄로 씁니다. CRON_TZ=는 cronie(RHEL·Amazon Linux 등)의 표기라 Ubuntu·Debian의 cron에서는 쓸 수 없으므로, 서버 시간대(timedatectl로 확인)를 일본 시간(으)로 맞추거나 시각을 서버 시간으로 바꿔서 쓰세요.
GitHub Actions(UTC로 바꾼 식)
on:
schedule:
- cron: '0 0 * * 1-5'
workflow_dispatch:GitHub Actions의 cron은 UTC로 해석되므로 일본 시간에서 9시간 옮겼습니다. workflow_dispatch를 추가하면 Actions 화면에서 수동으로도 실행할 수 있습니다.
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-job
spec:
schedule: "0 9 * * 1-5"
timeZone: "Asia/Tokyo"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: busybox
command: ["sh", "-c", "echo hello"]timeZone은 Kubernetes 1.27 이상에서 쓸 수 있습니다. 쓰지 않으면 kube-controller-manager의 시간대(대개 UTC)로 해석됩니다.
AWS EventBridge
# EventBridge Scheduler(시간대 지정 가능)
aws scheduler create-schedule --name my-schedule \
--schedule-expression "cron(0 9 ? * MON-FRI *)" \
--schedule-expression-timezone "Asia/Tokyo" \
--flexible-time-window Mode=OFF \
--target '{"Arn":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-func","RoleArn":"arn:aws:iam::123456789012:role/my-role"}'
# EventBridge 규칙(UTC로 해석됨)
ScheduleExpression: "cron(0 0 ? * MON-FRI *)"EventBridge는 "분 시 일 월 요일 연" 6개로 쓰며, 일 또는 요일 중 하나는 ?로 합니다. 요일 숫자는 1이 일요일이므로 MON-FRI처럼 영어로 썼습니다.
Spring @Scheduled
@Scheduled(cron = "0 0 9 * * MON-FRI", zone = "Asia/Tokyo")
public void run() {
// ...
}Spring은 맨 앞에 "초"가 있어 6개로 씁니다. zone을 쓰지 않으면 서버(JVM)의 시간대로 해석됩니다.
systemd timer(OnCalendar)
[Timer] OnCalendar=Mon..Fri *-*-* 09:00:00 Asia/Tokyo Persistent=true # 표기 확인: systemd-analyze calendar "Mon..Fri *-*-* 09:00:00 Asia/Tokyo"
Persistent=true로 하면 전원이 꺼져 있어 실행되지 못한 분을 부팅할 때 1회 실행합니다(cron에는 없는 기능).
입력한 cron 식과 명령은 이 브라우저에만 저장되며 서버로 보내지 않습니다. 다음 실행 일시는 이 기기의 시계를 기준으로 계산합니다.
ABOUT
cron 식 검사기|해석·다음 실행 일시·일본 시간/UTC 변환(GitHub Actions·EventBridge 지원) 소개
cron 식 검사기는 crontab·GitHub Actions·Kubernetes CronJob·AWS EventBridge·Spring의 @Scheduled에서 쓰는 cron 식을 붙여넣기만 하면 "평일(월~금) 9:00"처럼 풀어서 설명하고, 다음에 실행되는 일시를 일본 시간과 UTC로 10건 나열하는 도구입니다. GitHub Actions의 schedule이나 EventBridge 규칙은 UTC로 해석되므로 일본 시간의 시에서 9시간을 빼고, 일본 시간 0~8시는 전날·전 요일로 옮긴 식을 자동으로 만듭니다. 한 줄로 쓸 수 없을 때는 두 줄로 나누고, 변환 전과 후의 다음 40회 실행 시각이 일치하는지까지 확인합니다. 일과 요일을 둘 다 쓰면 "어느 한쪽"이 되는 점, 분을 *로 하면 한 시간에 60번 실행되는 점, */7이 7분 간격이 되지 않는 점, 31일만 지정하면 실행되지 않는 달이 있는 점, EventBridge의 ? 누락, crontab 명령의 % 이스케이프 누락 같은 흔한 실수도 알려 줍니다. 선택만으로 식을 만드는 빌더, systemd timer(OnCalendar)로 바꿔 쓰기, 자주 쓰는 표기의 빠른 참조표도 있습니다.
cron 식 검사기|해석·다음 실행 일시·일본 시간/UTC 변환(GitHub Actions·EventBridge 지원) 사용 방법
- 1"어디에서 쓰는 식인가요?"에서 crontab·GitHub Actions·Kubernetes·EventBridge·Spring 중 하나를 고른다
- 2cron 식을 붙여넣는다(crontab 한 줄, YAML의 - cron: '…' 줄, cron(…) 그대로도 가능)
- 3"의미(해석)"와 필드별 설명, 주의 목록을 확인한다
- 4"다음 실행 일시"에서 일본 시간과 UTC의 실행 시각, 30일간 실행 횟수, 간격이 의도와 맞는지 본다
- 5"다른 표기로 변환"에서 GitHub Actions(UTC로 바꾼 식)나 EventBridge·Kubernetes·Spring·systemd 표기를 복사한다
- 6식을 처음부터 만들 때는 "cron 식 만들기"에서 ○분마다·요일·매월 ○일·말일·n번째 ○요일을 고른다
이럴 때 유용해요
- GitHub Actions의 schedule을 일본 시간 아침 9시에 실행하고 싶은데 UTC로 어떻게 써야 할지 모른다
- 기존 워크플로에 적힌 UTC cron이 일본 시간으로 몇 시에 실행되는지 알고 싶다
- 서버 crontab에 쓴 배치가 다음에 언제 실행되는지 확인한 뒤 운영에 반영하고 싶다
- "0 0 13 * 5"처럼 일과 요일을 둘 다 쓴 식이 언제 실행되는지 확인하고 싶다
- AWS EventBridge의 cron(…)에서 ?를 붙이는 법이나 요일 숫자(1이 일요일)를 모르겠다
- 매월 말일이나 둘째 화요일에 실행하는 표기를 crontab과 EventBridge·Spring에서 비교하고 싶다
- Kubernetes CronJob이나 Spring의 @Scheduled, systemd timer에 같은 스케줄을 옮겨 쓰고 싶다
이용 시 참고 사항
- GitHub Actions의 schedule은 어느 저장소에서나 UTC로 해석됩니다. 일본 시간(JST)은 UTC보다 9시간 빠르므로 일본 시간 9:00은 UTC 0:00, 일본 시간 월요일 8:00은 UTC 일요일 23:00입니다.
- GitHub Actions의 schedule은 최단 5분마다이며, 붐비는 시간(특히 매시 0분)에는 몇 분~수십 분 늦어지거나 드물게 실행되지 않기도 합니다. 공개 저장소에서는 60일 동안 저장소에 활동이 없으면 예약된 워크플로가 자동으로 멈춥니다.
- crontab에서 일과 요일을 둘 다 *가 아니게 하면 "어느 한쪽"에 해당하는 날에 실행됩니다(man 5 crontab의 사양). 다만 한쪽이 *로 시작하면(*/2 등) "둘 다"로 취급됩니다. Spring의 @Scheduled는 "둘 다"이고, EventBridge는 한쪽을 반드시 ?로 합니다.
- AWS EventBridge의 cron은 "분 시 일 월 요일 연" 6개이며, 요일 숫자는 1이 일요일, 7이 토요일입니다(crontab은 0 또는 7이 일요일). L(말일)·W(가장 가까운 평일)·#(n번째 ○요일)을 쓸 수 있습니다. 규칙은 UTC이고, EventBridge Scheduler는 시간대를 지정할 수 있습니다.
- 다음 실행 일시는 선택한 시간대에서 이 기기의 시계를 기준으로 계산합니다. 서머타임이 있는 지역(미국·영국)에서는 전환일에 존재하지 않는 시각을 건너뛰고 표시합니다.
- 입력한 cron 식과 명령은 이 브라우저(localStorage)에만 저장되며 서버로 보내지 않습니다.
이런 질문에 답해 드려요
cron 식 검사기|해석·다음 실행 일시·일본 시간/UTC 변환(GitHub Actions·EventBridge 지원): 이런 상황에 도움이 됩니다.
- GitHub Actions의 cron을 일본 시간 아침 9시에 실행하는 작성법
- cron 식을 풀어서 설명하고 다음에 언제 실행되는지 확인하고 싶다
- UTC로 쓰인 cron이 일본 시간으로 몇 시에 실행되는지 알고 싶다
- cron에서 일과 요일을 둘 다 쓰면 어떻게 되는지
- 매월 말일이나 둘째 월요일에 cron을 실행하는 작성법
- AWS EventBridge의 cron 식 작성법과 ?의 의미
- crontab 5분마다·평일만·매월 1일 작성법
- Kubernetes CronJob이나 Spring의 @Scheduled를 일본 시간으로 실행하고 싶다
자주 묻는 질문
- GitHub Actions의 cron을 일본 시간으로 실행하려면 어떻게 쓰나요?
- GitHub Actions의 schedule은 UTC로 해석되므로 일본 시간의 시에서 9시간을 빼서 씁니다. 일본 시간 매일 9:00은 "0 0 * * *", 평일 9:00은 "0 0 * * 1-5"입니다. 일본 시간 0~8시는 UTC로는 전날이 되므로 평일 8:30이라면 요일도 하루 앞으로 옮겨 "30 23 * * 0-4"(일~목 23:30 UTC)로 합니다. 이 도구의 "일본 시간과 UTC 변환"에 일본 시간 식을 넣으면 옮긴 식과 다음 실행 일시를 보여 줍니다.
- cron에서 일과 요일을 둘 다 지정하면 어떻게 되나요?
- crontab(Linux의 cron)·GitHub Actions·Kubernetes에서는 일과 요일을 둘 다 *가 아니게 하면 "어느 한쪽에 해당하는 날"에 실행됩니다. 예를 들어 "0 0 13 * 5"는 13일의 금요일에만 실행되는 것이 아니라 매월 13일과 매주 금요일에 모두 실행됩니다. "첫째 월요일"처럼 둘 다 만족하는 날로 하고 싶다면 일을 1-7로 하고 명령 맨 앞에서 요일을 확인하거나, EventBridge·Spring의 "MON#1" 같은 표기를 쓰세요.
- "* 9 * * *"와 "0 9 * * *"는 무엇이 다른가요?
- "* 9 * * *"는 분이 *이므로 9:00부터 9:59까지 1분마다 60번 실행됩니다. 매일 9:00에 한 번만 실행하려면 분을 0으로 한 "0 9 * * *"가 맞습니다. cron 식에서 가장 흔한 실수이며, 이 도구에서는 주의로 표시합니다.
- 매월 말일에 cron을 실행하려면 어떻게 하나요?
- crontab과 GitHub Actions에는 말일 표기가 없으므로 일을 28-31로 하고 명령 맨 앞에서 "내일이 1일인지" 확인합니다(예: 0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && 명령). crontab에서는 명령 안의 %를 \%로 써야 하는 점에 주의하세요. AWS EventBridge라면 cron(0 23 L * ? *), Spring이라면 0 0 23 L * *처럼 L로 쓸 수 있습니다.
- "*/7"은 7분 간격이 되나요?
- 되지 않습니다. "*/7"은 매시 0·7·14·21·28·35·42·49·56분에 실행되고, 56분 다음은 다음 시의 0분이므로 그 부분만 간격이 4분이 됩니다. 60을 나누어떨어뜨리는 수(1·2·3·4·5·6·10·12·15·20·30)라면 간격이 일정합니다. 이 도구의 "실행 간격"에서 최단 간격과 최장 간격을 확인할 수 있습니다.
- AWS EventBridge의 cron에서 "?"는 무슨 뜻인가요?
- "?"는 "지정하지 않음"이라는 뜻으로, EventBridge에서는 일(3번째 값)이나 요일(5번째 값) 중 하나를 반드시 ?로 합니다. 매일이라면 cron(0 9 * * ? *), 평일이라면 cron(0 9 ? * MON-FRI *)입니다. 둘 다 값을 쓰면 오류가 납니다. 또 EventBridge의 요일 숫자는 1이 일요일이므로 MON-FRI처럼 영어로 쓰면 실수하기 어렵습니다.
- crontab 명령에 date +%Y%m%d를 쓰면 왜 동작하지 않나요?
- crontab에서는 명령 안의 %가 줄바꿈으로 취급되어 %부터 뒤는 표준 입력으로 넘어갑니다. 그래서 date +%Y%m%d 같은 표기는 중간에서 끊깁니다. crontab 안에서는 date +\%Y\%m\%d처럼 %앞에 \를 붙이거나, 날짜를 만드는 처리를 셸 스크립트로 묶어 그 스크립트를 crontab에서 호출하세요.
Special Thanks