Cron 표현식 해설기
cron 표현식을 쉬운 말로 읽고, 어느 시간대에서든 다음 실행 시각을 확인하며, 표준 형태로 정리하세요.
코드 예제
내 프로젝트에 그대로 복사해서 쓰세요. 모든 예제는 해당 언어의 표준 라이브러리만 사용하므로 설치할 것이 없습니다.
const expand = (field, min, max) =>
field.split(',').flatMap((part) => {
const [range, step = '1'] = part.split('/')
const [from, to = from] = range === '*' ? [min, max] : range.split('-').map(Number)
return Array.from({ length: Math.floor((to - from) / Number(step)) + 1 }, (_, i) => from + i * Number(step))
})
function matches(expression, instant) {
const [minute, hour, dayOfMonth, month, dayOfWeek] = expression.split(' ')
const inMonth = expand(dayOfMonth, 1, 31).includes(instant.getUTCDate())
const inWeek = expand(dayOfWeek, 0, 7).some((day) => day % 7 === instant.getUTCDay())
const dayMatches =
!dayOfMonth.startsWith('*') && !dayOfWeek.startsWith('*') ? inMonth || inWeek : inMonth && inWeek
return (
expand(minute, 0, 59).includes(instant.getUTCMinutes()) &&
expand(hour, 0, 23).includes(instant.getUTCHours()) &&
expand(month, 1, 12).includes(instant.getUTCMonth() + 1) &&
dayMatches
)
}
console.log(matches('*/15 9-17 * * 1-5', new Date('2023-11-14T09:30:00Z')))기능 소개
Cron 표현식을 쉬운 말로 풀어 읽고, 원하는 시간대에서 다음 실행 시각을 확인하고, 표준 형식으로 정리합니다. 표준 5개 필드 cron과 초가 포함된 Quartz 또는 Spring 방언을 지원합니다. 모든 계산은 브라우저 안에서 이루어집니다.
사용 방법
- 표현식을 입력하거나 붙여넣습니다. 예:
*/15 9-17 * * MON-FRI.@daily,@hourly같은 단축 표기도 이해합니다. 커서가 있는 필드는 강조되고 아래에서 설명됩니다. - 방언을 고릅니다. 표준 (5개 필드) 또는 Quartz / Spring(초로 시작하는 6개 또는 7개 필드)입니다.
- 일정을 해석할 시간대와 나열할 다음 실행 횟수를 고릅니다.
- 입력란 위에서 말로 풀어 쓴 설명을 읽고, 그 아래에서 다음 실행 시각을 확인합니다. 모든 cron이 이해하지는 못하는 문법은 안내로 알려 줍니다.
- 무작위나 일정 칩으로 시작하거나, 여러 줄로 바꿔 한 줄에 하나씩 표현식을 확인합니다.
예제
@daily → 0 0 * * *
*/15 9-17 * * MON-FRI → 월요일부터 금요일까지, 오전 09:00부터 오후 05:59 사이에 15분마다
매월 둘째 월요일 정오를 나타내는 Quartz 표현식입니다.
0 0 12 ? * MON#2
알아두면 좋은 점
- 다섯 개의 필드는 분, 시, 일, 월, 요일입니다.
- 표준 cron은 일요일을 0으로 셉니다. Quartz와 Spring은 1로 세며, 일 필드나 요일 필드 중 한 곳에
?가 필요합니다. - Cron은 그것이 실행되는 머신이나 스케줄러의 시계를 기준으로 동작하므로 해당 시간대를 선택하세요. 대개 UTC입니다.
- Quartz의
L,W,#(마지막 날, 가장 가까운 평일, n번째 요일)을 지원합니다. - 읽을 수 없는 필드는 빨갛게 바뀌고, 메시지가 그 필드를 알려 줍니다.
- 일과 요일을 모두 지정하면 둘 다 일치할 때만이 아니라 하나라도 일치하면 작업이 실행됩니다.
@reboot에는 나열할 일정이 없고, 표준 cron에서 일요일을7로 쓰거나 Quartz 문자?,L,W,#를 쓰면 안내가 표시됩니다.
Cron 표현식이란?
cron 표현식은 작업을 언제 실행할지 다섯 개 필드(분, 시, 일, 월, 요일)로 나타냅니다. *는 모든 값, */15는 15마다, 1-5는 범위, 1,15는 목록입니다. Quartz와 Spring은 앞에 초 필드를, 때로는 끝에 연도를 더하고 L, W, # 같은 확장도 지원합니다.
자주 묻는 질문
실행 시각은 어느 시간대를 쓰나요?
선택한 시간대입니다. cron은 그것이 동작하는 머신이나 스케줄러의 시계를 따르므로, 실제 시각을 보려면 그 시간대(대개 UTC)를 고르세요.
표준과 Quartz는 무엇이 다른가요?
표준 cron은 필드가 다섯 개이고 일요일이 0입니다. Quartz와 Spring은 여섯 또는 일곱 개이며 초로 시작하고 일요일이 1이며, 일 또는 요일 필드 중 하나에 ?가 필요합니다.
이 도구가 표현식을 어딘가로 전송하나요?
아니요. 설명과 실행 시각은 브라우저에서 계산됩니다. 입력한 내용은 저희 서버로 전송되지 않습니다.