Cron 식 빌더
변환cron 식을 조립·검증·해설하고 다음 트리거 시각(UTC)을 계산합니다.
- 다음 실행 (UTC)
- —
- 복사
- —
이 페이지에서
cron 식이란?#
cron 식은 공백으로 구분된 다섯 필드로 표현되는 간결한 스케줄입니다. 분 시 일 월 요일 순입니다. 0 9 * * 1-5 같은 줄은 왼쪽부터 읽으면 “0분, 9시, 모든 일, 모든 월, 15(월금)“가 되어, 곧 평일 09:00를 뜻합니다. 각 *은 “이 필드의 모든 값”을 의미하므로, 고정하는 필드가 많을수록 스케줄은 구체화되고 *으로 남기는 필드가 많을수록 더 자주 실행됩니다.
cron은 Linux crontab, GitHub Actions, Kubernetes CronJob, 대부분의 CI 시스템, 그리고 수많은 작업 스케줄러가 사용하는 고유의 스케줄링 언어입니다. 식을 올바르게 쓰는 것이 절반이라면, 나머지 반은 경험 많은 엔지니어도 넘어지게 만드는 일/요일 특성(아래 FAQ 참조)입니다. 이 페이지는 입력하는 대로 다섯 필드를 파싱하고, 구문이나 범위 오류가 있는 정확한 필드를 표시하며, 다음 실행 시각을 계산해 주어 스케줄이 생각한 대로 동작하는지 확인할 수 있게 합니다.
사용 방법#
- 상단의 식 상자를 편집합니다. 기본값은
* * * * *(매분)입니다. - 그 아래에 필드별 드롭다운이 5개 있습니다(분, 시, 일, 월, 요일). 각 필드에서 자주 쓰는 조각(
*,*/5,0,1-5,0,6…)을 제공하며, 하나를 고르면 식의 해당 자리에 채워집니다.*/15가 분 자리에 들어가는지 헷갈릴 때 유용합니다. - 프리셋 행은 매분·매시·매일·매주·매월·매년·평일의 완성된 시작용 스케줄을 한 번에 채워 줍니다.
- 출력 패널은 다음 실행(현재 시각 이후 처음으로 일치하는 순간)과 상태 줄을 보여 줍니다. 상태 줄은 유효한 파싱을 확인하거나 문제가 있는 필드를 짚어 줍니다. now() 를 누르면 현재 순간을 기준으로 다시 계산합니다.
주요 기능#
- 완전한 5필드 문법.
*, 쉼표 목록(0,15,30,45), 범위(1-5), 스텝(*/15,9-17/2), 월/요일 이름(JAN-DEC,SUN-SAT, 대소문자 구분 없음)을 지원합니다.7은 일요일로 허용되며0으로 정규화됩니다. - 정확한 일/요일 논리. 표준 Vixie-cron 규칙을 구현합니다. 두 필드가 모두 제한되었을 때는 어느 한쪽이라도 일치하면 실행되고(논리 OR), 한쪽만 제한되었을 때는 양쪽 모두 일치해야 합니다(AND). 이 부분을 잘못 구현한 계산기가 많습니다.
- 필드 단위의 정확한 오류. 잘못된 범위나 튀어나온 글자는 “잘못된 식” 같은 뭉뚱그린 메시지가 아니라 정확히 어느 필드(
분,시…)인지 짚어 줍니다. - UTC 기반 다음 실행. 다음 트리거는 순간의 UTC 구성요소로 계산되므로 페이지를 어디서 로드하든 결정론적이며, 이어서 복사할 수 있는 보통 날짜로 렌더링됩니다.
- 도달 불가능 감지. 절대 일치할 수 없는 식(예: 어느 달에도 존재하지 않는 일)은 무한 루프 대신 감지됩니다.
사용 예#
평일 스탠드업을 위해 0 9 * * 1-5를 입력합니다. 필드별로: 분 0, 시 9, 일 *, 월 *, 요일 1-5입니다. 일 필드(*)와 요일 필드(1-5)가 있지만 제한된 것은 요일뿐, 일은 와일드카드이므로 AND 경로가 적용됩니다. 즉 월~금인 날 09:00에 실행됩니다. 다음 실행은 다가오는 평일 09:00 UTC 순간을 보여 줍니다.
이제 0 0 1 * 1(“0분, 0시, 매월 1일, 매월, 월요일”)과 비교해 보세요. 여기서는 일(1)과 요일(1)이 모두 제한되어 있으므로 cron은 OR 경로를 택합니다. 즉 매월 1일 그리고 모든 월요일에 실행됩니다. “1일인 월요일에만”이 아니죠. 이것이 거의 모든 사람이 빠지는 함정입니다. 다음 실행 패널이 그 차이를 눈에 보이게 만듭니다. 그 월요일이 1일이 아니더라도 가장 가까운 월요일로 넘어가는 것을 볼 수 있습니다.
FAQ#
의도하지 않은 날에 작업이 실행되는 이유는?#
거의 항상 일/요일 상호작용 때문입니다. 표준 cron은 둘 다 고정되어 있을 때 OR로 취급합니다. 0 0 1 * 1은 “1일, 또는 모든 월요일”이지 “1일이면서 월요일일 때만”이 아닙니다. 1일이 월요일일 때만 실행되길 원한다면 cron 자체로는 표현할 수 없습니다. 1일로 스케줄을 잡고 스크립트 안에서 요일 검사를 추가하세요.
*/5와 9-17/2는 무슨 뜻인가요?#
분 필드의 */5는 “0부터 시작해 5 간격” → 0, 5, 10, 15, …, 55입니다. 9-17/2는 “9~17 범위에서 2 간격” → 9, 11, 13, 15, 17로, “업무 시간 동안 2시간 간격”에 유용합니다. / 뒤의 스텝 제수는 앞선 범위나 와일드카드에 적용됩니다.
일요일은 0인가요 7인가요?#
둘 다 맞습니다. 요일 필드는 일요일에 0과 7을 모두 허용합니다(cron은 역사적으로 0을 사용했고 일부 시스템이 7을 추가했습니다). 이 도구는 둘 다 받아 7을 0으로 정규화합니다. 이름도 가능합니다. SUN, Mon, fri는 모두 대소문자 구분 없이 동작합니다.
식은 파싱되는데 다음 실행이 너무 멀리 있습니다. 잘못된 건가요?#
아마 아닙니다. 보통은 스케줄이 실제로 가까운 시점에 실행될 수 없다는 뜻입니다. 0 0 29 2 *(2월 29일)는 유효하지만 윤년에만 일치하므로 다음 실행이 수년 뒤일 수 있습니다. 도구는 검색을 약 8년으로 제한하며, 그 창 안에서 일치할 수 없는 식은 페이지를 멈추게 하는 대신 도달 불가능으로 보고합니다.