Crontab Guru
cron 표현식을 붙여넣으면 그 표현식이 무엇을 하는지 필드별로 쉬운 영어로 설명해 줍니다. 필드 순서를 외우거나 범위를 찾아볼 필요가 없습니다. Guru가 다섯 필드(분, 시, 일, 월, 요일)를 하나씩 훑으며 표현식을 왼쪽에서 오른쪽으로 읽어 줍니다. crontab 줄을 배포 전에 확인하거나, 물려받은 줄이 무슨 뜻인지 설명받기에 유용합니다.
Guru 사용 방법
-
1
표현식 붙여넣기
표준 5필드 cron 표현식(예: `0 9 * * 1-5`)을 입력란에 복사하세요.
-
2
설명 요청
Explain Cron을 클릭하면 각 필드(분, 시, 일, 월, 요일)의 설명이 줄 단위로 반환됩니다.
-
3
설명 읽기
설명은 영어로 생성됩니다. 예: "Minute: every 5 minutes" 또는 "Hour: from 9 through 17."
-
4
배포 전에 확인
설명을 활용해 스케줄이 원하는 대로 동작하는지 확인한 뒤 crontab, CI 설정, Kubernetes 매니페스트에 넣으세요.
필드 빠른 참조표
┌───────────── 분 (0-59)
│ ┌─────────── 시 (0-23)
│ │ ┌───────── 일 (1-31)
│ │ │ ┌─────── 월 (1-12 또는 JAN-DEC)
│ │ │ │ ┌───── 요일 (0-6 또는 SUN-SAT; 일요일 = 0 또는 7)
│ │ │ │ │
* * * * *
cron 표현식에 쓰는 연산자
| 연산자 | 의미 | 예시 |
|---|---|---|
* |
모든 값 | * * * * * |
, |
값 목록 | 0,15,30,45 |
- |
범위 | 9-17 |
/ |
스텝(시작값/간격) | */5, 0-30/5 |
L |
마지막(그 달의 마지막 날 또는 마지막 해당 요일, Quartz) | L, 5L |
W |
가장 가까운 평일 | 15W (Quartz) |
# |
그 달의 N번째 해당 요일 | 1#3 (Quartz) |
? |
특정 값 지정 안 함 | Quartz 전용 |
읽는 순서가 중요합니다
0 */2 * * 1-5는 왼쪽에서 오른쪽으로 “0분, 2시간마다, 날짜는 무관, 월은 무관, 월요일부터 금요일까지”로 읽습니다. 사람들은 습관적으로 필드를 오른쪽에서 왼쪽으로 읽다가 혼란에 빠지곤 합니다. 항상 ‘분’부터 읽으세요.
“X분마다”의 함정
*/10 * * * *는 0분, 10분, 20분, 30분, 40분, 50분에 실행됩니다. “작업이 생성된 시점부터 10분마다”가 아닙니다. 크론의 스텝은 항상 필드 범위의 시작점을 기준으로 계산됩니다. 작업을 12:03에 배포해도 첫 실행은 12:13이 아니라 12:10입니다.
“마지막 실행 후 N분 뒤”가 정말로 필요한 작업이라면, 영속 타이머를 가진 스케줄러를 사용하세요(OnUnitActiveSec을 쓰는 systemd 타이머, 또는 마지막 실행 시각을 저장하는 애플리케이션 수준 스케줄링 등).
알아 두면 좋은 cron 함정
- ‘일’과 ‘요일’을 모두 지정한 경우: 대부분의 cron 구현은 이를 OR로 처리하므로 원하는 결과가 아닐 가능성이 큽니다.
- 스텝 0:
*/0은 유효하지 않습니다. - 범위가 자정을 넘어가는 경우: 시 단위의
22-2는 고전적인 cron에서 동작하지 않습니다.22-23,0-2로 작성하세요. - 2월 30일:
0 0 30 2 *같은 스케줄은 절대 실행되지 않습니다. - 서머타임(DST) 모호성: 새벽 2시에서 3시 사이로 예약된 작업은 DST 전환일에 두 번 실행되거나 아예 실행되지 않을 수 있습니다.
cron과 최신 스케줄러 비교
Unix의 cron은 지금도 어디에나 쓰이지만, 중요한 작업이라면 다음 중 하나가 필요할 것입니다.
- systemd 타이머: 놓친 실행을 따라잡고, 무작위 오프셋을 지원하며, 유닛 파일에서 설정을 읽습니다.
- Kubernetes CronJob: 선언적이며, 재시도를 지원하고, 1.25 이상에서 타임존을 인식합니다.
- Airflow / Prefect / Dagster: 의존성, 재시도, 백필, 관측 가능성이 필요한 작업용.
- GitHub Actions 스케줄: 5필드 cron, UTC 전용, 최소 5분 간격, 베스트 에포트 방식.
cron 자체는 훌륭한 형식이지만, 절대 놓쳐서는 안 되는 작업의 스케줄러로는 부족합니다.
자주 묻는 질문
표준 cron에서 요일 0이 일요일이기 때문입니다(7도 일요일이라 두 가지 관례를 모두 지원합니다). 월요일은 1입니다. Quartz는 요일을 1~7로 번호 매기고 일요일을 1로 두기 때문에, 구현(방언)을 옮겨 다니는 사람들이 자주 헷갈립니다.
고전적인 Unix의 cron은 서버의 로컬 시간대(/etc/timezone에 설정된 값)로 동작합니다. Kubernetes의 CronJob, GitHub Actions, 그리고 대부분의 클라우드 스케줄러는 기본적으로 UTC로 동작합니다. 항상 확인하고, 가능하면 UTC를 사용해 서머타임으로 인한 문제를 피하세요.
고전적인 cron으로는 이를 직접 표현할 수 없습니다. 대안은 매주 월요일에 실행하고 스크립트 안에서 날짜를 확인하는 것입니다: [ $(date +%d) -le 7 ] && ./job.sh. Quartz는 1#1로 기본 지원합니다.
아니요. 스케줄마다 각자의 줄이 필요합니다. 다만 목록을 사용해 여러 스케줄을 한 줄로 묶을 수는 있습니다: 0 9,17 * * *은 오전 9시와 오후 5시에 실행됩니다. 한 줄로 표현할 수 없는 스케줄은 같은 명령을 가리키는 여러 줄을 추가하세요.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
랜덤 영어 글자 생성기
A-Z 영어 글자를 무작위로 생성합니다. 개수와 대문자, 소문자, 혼합 대소문자를 선택해 게임, 과제, 수업 활동에 활용하세요.
랜덤 색상 팔레트 생성기
2~15개의 색상으로 랜덤 팔레트를 만들고, 비비드, 파스텔, muted, dark 스타일을 선택한 뒤 HEX 코드나 CSS 변수를 복사하세요.