다섯 필드
cron 표현식은 공백으로 구분한 다섯 필드로 되어 있으며, 스케줄러에게 작업을 언제 실행할지 알려 줍니다. 왼쪽부터 차례로:
| 분 | 0-59 |
| 시 | 0-23 |
| 일 | 1-31 |
| 월 | 1-12 |
| 요일 | 0-6(일요일 = 0) |
현재 시각이 모든 필드와 맞을 때 작업이 실행됩니다.
특수 문자
*모든 값.,목록:1,15는 1일과 15일.-범위: 마지막 필드의1-5는 월요일부터 금요일./간격: 분 필드의*/10은 10분마다.
자주 쓰는 일정
*/5 * * * * | 5분마다 |
0 * * * * | 매시 정각 |
0 0 * * * | 매일 0시 |
30 8 * * 1-5 | 평일 8시 30분 |
0 0 1 * * | 매월 1일 0시 |
0 3 * * 0 | 매주 일요일 3시 |
어떤 표현식이든 cron 표현식 해석기에 붙여 넣으면 뜻을 말로 읽을 수 있고, 다음 실행 시각도 알 수 있습니다.
흔한 함정
- 시간대: cron은 서버 시계를 쓰며, 많은 경우 UTC입니다. 한국 시간 9시에 돌리려면 UTC로는 0시입니다.
- 일과 요일 둘 다: 둘 다 지정하면 둘 중 하나만 맞아도 실행됩니다. 둘 다 맞을 때가 아닙니다.
- 초: 표준 cron에는 초 필드가 없습니다. Quartz나 Spring 같은 일부 시스템은 맨 앞에 초를 더해 필드가 여섯 개가 됩니다.
보이는 대로 동작하지 않는 표현식
| 표현식 | 의도 | 실제 실행 |
|---|---|---|
0 9 1-7 * 1 | 첫째 월요일 09:00 | 매달 1~7일 09:00, 그리고 매주 월요일 09:00 |
*/15 9-17 * * 1-5 | 9시~17시 15분마다 | 평일 09:00~17:45, 17시대 포함 |
0 0 31 * * | 매달 말일 | 31일이 있는 일곱 달에만 |
0 0 29 2 * | 1년에 한 번 | 윤년에만 |
첫째 월요일에 실행하려면 1~7일에 실행하고 스크립트 안에서 요일을 확인하세요.
단축 표기
많은 cron은 별칭을 받습니다. @hourly, @daily, @weekly, @monthly, @yearly, 그리고 부팅할 때 한 번 실행하는 @reboot입니다.
서머타임
한국에는 서머타임이 없지만, 서머타임이 있는 나라의 현지 시각으로 도는 서버에서는 1:00~3:00 사이의 작업이 시계를 앞당기는 밤에 건너뛰어지거나 되돌리는 밤에 두 번 실행될 수 있습니다(cron 구현에 따라 다름). 중요한 작업은 이 시간대를 피하거나 서버를 UTC로 운영하세요.