cron 표현식 읽기
다섯 칸짜리 cron 표현식을 사람 말로 옮기고, 앞으로 다섯 번 도는 시각을 냅니다. 말로만 적어 두면 반쯤은 못 믿게 되므로 실제 날짜를 함께 보여 줍니다.
분 시 일 월 요일
월·화·수·목·금요일 9시 0에 돕니다
- 분
- 0
- 0
- 시
- 9
- 9
- 일
- *
- 31개
- 월
- *
- 12개
- 요일
- 1-5
- 1,2,3,4,5
일과 요일을 둘 다 지정하면 어느 한쪽만 맞아도 돕니다(OR). cron 에서 가장 자주 오해받는 규칙이라, 말로만 적지 않고 실제 날짜를 함께 보여 줍니다. 시간대는 이 브라우저 설정을 따르므로 서버 시간대와 다를 수 있습니다.
칸마다 쓸 수 있는 것
* 는 전부, 1,15 는 목록, 1-5 는 범위, */10 은 걸음입니다. 범위에 걸음을 붙여 1-5/2 로 쓸 수도 있습니다. 월은 jan~dec, 요일은 sun~sat 로 적어도 되고 대소문자를 가리지 않습니다. 요일 7 은 0 과 같은 일요일입니다. L·W·#·? 와 @daily 같은 줄임말은 읽지 않습니다 — 리눅스 cron 에는 없는 확장입니다.
다음 실행을 세는 법
지금부터 1분 뒤에서 시작해 1분씩 앞으로 가며 다섯 칸에 다 맞는 시각을 다섯 개 모읍니다. 계산이라기보다 달력을 넘기는 것이라 0 0 31 * * 처럼 어떤 달에는 없는 날도 맞게 나오고, 0 0 29 2 * 는 윤년만 잡힙니다. 4년 안에 다섯 번을 못 채우면 있는 만큼만 보여 줍니다 — 2월 30일처럼 영영 오지 않는 날은 아무것도 나오지 않습니다.
뜻하는 시각과 실제로 도는 시각
다음 실행은 이 브라우저의 시계와 시간대로 셉니다. 서버 시간대가 다르면 그 시차만큼 다르고, 서머타임이 있는 지역이면 시계가 넘어가는 날 한 번 건너뛰거나 두 번 돕니다.
자주 묻는 질문
일과 요일을 둘 다 쓰면 어떻게 되나요?
어느 한쪽만 맞아도 돕니다(OR). 「0 0 1 * 1」은 1일이면서 월요일인 날이 아니라, 매달 1일과 모든 월요일에 돕니다. cron 에서 가장 자주 오해받는 규칙이라 다음 실행 시각을 함께 내는 것입니다.
초 단위 cron 도 되나요?
다섯 칸(분·시·일·월·요일)만 받습니다. 여섯 칸짜리는 Quartz 나 일부 라이브러리의 확장이며 맨 앞이 초입니다. 그 경우 앞 한 칸을 떼고 넣어 보세요.
시간대는 무엇인가요?
이 브라우저의 시간대입니다. 서버가 UTC 로 돌고 있다면 실제 실행 시각은 다릅니다.
칸이 여섯 개인 표현식도 있던데요?
맨 앞에 초를 두는 방식입니다. 여기서는 다섯 칸(분·시·일·월·요일)을 읽습니다 — 리눅스 cron 과 대부분의 스케줄러가 쓰는 방식입니다. 여섯 칸짜리를 넣으면 자리가 하나씩 밀려 엉뚱하게 읽히니 앞의 초를 떼고 넣으세요.
시간대는 어디 기준인가요?
앞으로 도는 시각은 이 브라우저의 시간대로 보여 줍니다. 실제로 도는 곳이 UTC 서버라면 그만큼 차이가 납니다 — 새벽에 도는 작업을 짤 때 가장 자주 어긋나는 자리입니다.
매달 마지막 날에 돌리려면요?
다섯 칸 cron 에는 그런 표기가 없습니다. L 은 Quartz 확장입니다. 리눅스에서는 0 0 28-31 * * 로 걸어 두고 스크립트 안에서 「내일이 1일인가」를 확인하는 것이 흔한 방법입니다. 여기에 넣으면 28~31일 모두가 다음 실행에 잡힙니다.
GitHub Actions 의 schedule 도 같은 문법인가요?
다섯 칸은 같지만 시간대가 늘 UTC 입니다. 한국 시각 아침 9시는 0 0 * * * 입니다. 여기서는 브라우저 시간대로 보여 주므로, Actions 에 적을 값은 아홉 시간을 뺀 것을 넣고 다음 실행이 맞는지 보세요.
붙여넣은 코드가 서버로 가나요?
가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.