크론 표현식 생성기

드롭다운으로 분·시·일·월·요일을 선택해 crontab 일정을 만들고, 알기 쉬운 문장 설명과 자주 쓰는 프리셋도 함께 확인하세요.

조회수 1,013회

크론 표현식 * * * * *
문장으로 보기

작동 원리

크론 표현식은 공백으로 구분된 다섯 개의 필드를 항상 같은 순서로 사용해 반복 작업을 예약합니다: 분 · 시 · 일(월중) · 월 · 요일. 각 필드는 값 하나 또는 네 가지 특수 문자 중 하나를 받을 수 있습니다: *는 "가능한 모든 값"을 의미하고, */15는 "필드의 최솟값부터 시작해 15단위마다"를 의미하며, 1,15,30은 명시적인 목록이고, 1-5는 양 끝을 포함하는 범위입니다. 왼쪽에서 오른쪽으로 읽으면 0 9 * * 1-5는 "9시의 0분에, 매월 매일, 매달, 요일 1부터 5까지"를 의미합니다 — 즉 월요일부터 금요일까지 오전 9시입니다. */10 * * * *는 하루 종일 10분마다 실행되고, 0 0 1 * *는 매달 1일 자정에 실행됩니다.

드롭다운으로 일정을 구성하면 이 도구가 다섯 개의 필드를 조합한 뒤, 그 결과를 평이한 문장으로 번역해 주므로 crontab 파일이나 클라우드 스케줄러에 붙여넣기 전에 눈으로 검증할 수 있습니다. 매분, 매시간, 매일 지정 시각, 평일에만 실행 등 사람들이 가장 자주 찾는 일정은 자주 쓰는 프리셋으로 한 번의 클릭이면 준비됩니다.

알아두어야 할 점

크론 의미론에서 가장 큰 함정: 일(월중)과 요일이 둘 다 제한되어 있을 때(둘 중 어느 것도 *로 남아 있지 않을 때), 이 둘은 AND가 아니라 OR로 결합됩니다. 그래서 0 0 15 * 5는 "15일이면서 동시에 금요일인 경우"를 뜻하지 않습니다 — "그 달의 15일, 또는 모든 금요일"을 뜻하며, 대부분의 사람이 의도한 것보다 훨씬 더 자주 실행됩니다. 둘 중 하나만 중요하다면 나머지 하나는 *로 남겨 두어야 합니다.

요일 번호 매김도 뜻밖일 수 있습니다: 대부분의 크론 구현에서 07은 모두 일요일을 의미하며, 월요일은 1입니다. 그리고 결정적으로, 크론은 항상 서버에 설정된 시간대 — 클라우드 인프라에서는 보통 UTC — 를 기준으로 실행되며, 일정을 설정한 사람의 로컬 시간대가 아닙니다. 그래서 "오전 9시"로 예약한 작업이 호스트의 시간대를 확인하기 전까지는 예상과 다른 로컬 시각에 실행될 수 있습니다. GitHub Actions의 schedule:, AWS EventBridge, Kubernetes CronJob 같은 클라우드 스케줄러는 모두 이와 동일한 다섯 필드 문법을 기반으로 하며, 때로는 공급업체별 확장(선택적인 초 필드, 요일 이름 축약형 등)을 덧붙입니다. 그래서 여기서 만든 일정은 최소한의 변환만으로 이런 플랫폼에 그대로 옮길 수 있습니다.

자주 묻는 질문

30초마다 실행하려면 어떻게 하나요?

기존 cron의 최소 단위는 분입니다. 흔히 쓰는 방법은 항목을 두 개 만드는 것입니다 — 하나는 그대로, 다른 하나는 명령어 앞에 `sleep 30 &&`를 붙이는 방식입니다. 또는 초 단위를 지원하는 systemd 타이머를 사용할 수도 있습니다.

9시에 실행되도록 설정했는데 왜 이상한 시각에 실행됐나요?

거의 대부분 시간대 문제입니다. crontab은 서버의 로컬 시간을 기준으로 실행되며, 클라우드 환경에서는 보통 UTC입니다. 호스트에서 `date` 명령으로 확인하거나, 지원되는 경우 CRON_TZ를 설정하세요.

표현식을 안전하게 테스트하려면 어떻게 하나요?

먼저 로그를 남기는 명령으로 테스트해 보세요: `* * * * * date >> /tmp/cron-test.log`. 주기를 확인한 다음 실제 명령으로 교체하세요. crontab을 실행하는 사용자에게 필요한 PATH가 설정되어 있는지도 확인하세요 — cron 환경은 매우 제한적입니다.

일(월중)과 요일을 둘 다 설정하면 어떻게 되나요?

AND가 아니라 OR로 결합됩니다 — `0 0 15 * 5` 같은 일정은 그 달의 15일에도, 그리고 매주 금요일에도 실행되며, 15일에 우연히 해당하는 금요일에만 실행되는 것이 아닙니다. 크론만으로는 두 조건의 교집합을 표현할 수 없으므로, 그런 확인은 작업 자체 안에서 처리해야 합니다.

크론은 일광절약시간제(DST)를 반영하나요?

구현에 따라 다르지만, 기존 크론은 대체로 DST 전환을 포함한 시스템 시계의 로컬 시간을 그대로 따릅니다 — 즉 "봄철 시간 앞당김" 또는 "가을철 시간 되돌림" 시간대에 예약된 작업이 그날 한 번도 실행되지 않거나 두 번 실행될 수 있다는 뜻입니다. UTC로 설정된 서버는 이 문제를 완전히 피할 수 있으며, 대부분의 운영 스케줄러가 기본값으로 UTC를 쓰는 이유 중 하나이기도 합니다.

같은 필드에서 범위와 스텝을 함께 사용할 수 있나요? 예를 들어 하루걸러 평일마다처럼요.

네 — 스텝은 와일드카드뿐 아니라 범위에도 적용할 수 있습니다. 요일 필드의 `1-5/2`는 "월요일부터 금요일 범위 안에서 하루씩 건너뛰며"를 의미하므로 결과는 월요일, 수요일, 금요일이 됩니다. 이 범위/스텝 결합 형식은 Vixie cron과 systemd를 포함한 대부분의 최신 크론 구현에서 지원되지만, 가장 오래된 POSIX 구현에서는 지원되지 않을 수 있으므로 레거시 환경에서 의존하기 전에 한 번 테스트해 보시기 바랍니다.

댓글

아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!

비슷한 도구