cron 표현식 생성기
crontab 일정을 작성하고 읽습니다. cron 표현식을 입력하면 언제 실행되는지 말로 알려 주고, 다음 실행 시각과 다섯 필드 각각의 뜻을 보여 줍니다.
매분.
다음 실행
시각은 사용자 컴퓨터의 표준 시간대()로 표시됩니다. cron은 서버의 표준 시간대를 쓰며, 같은 경우가 드뭅니다.
자주 쓰는 일정
하나를 고르면 위 칸에 들어갑니다.
| * * * * * | 매분 |
| */5 * * * * | 5분마다 |
| */15 * * * * | 15분마다 |
| */30 * * * * | 30분마다 |
| 0 * * * * | 매시간 |
| 0 */2 * * * | 2시간마다 |
| 0 */6 * * * | 6시간마다 |
| 0 */12 * * * | 하루 두 번 |
| 0 0 * * * | 매일 자정 |
| 0 9 * * * | 매일 오전 9시 |
| 0 9 * * 1-5 | 평일 오전 9시 |
| 0 9 * * 6,0 | 토요일과 일요일 9시 |
| 0 0 * * 1 | 매주 월요일 자정 |
| 0 18 * * 5 | 매주 금요일 오후 6시 |
| 0 0 1 * * | 매달 1일 |
| 0 0 1 1 * | 매년 1월 1일 |
각 필드의 뜻
| 필드 | 허용되는 값 |
|---|---|
| 분 | 0 – 59 |
| 시 | 0 – 23 |
| 일 | 1 – 31 |
| 월 | 1 – 12, JAN – DEC |
| 요일 | 0 – 6, SUN – SAT (0 = 7) |
특수 문자
| 문자 | 뜻 |
|---|---|
| * | 모든 값 |
| , | 목록의 값을 구분 |
| - | 값의 범위 |
| / | 범위 안의 간격 |
단축 표기
| @yearly, @annually | 0 0 1 1 * |
| @monthly | 0 0 1 * * |
| @weekly | 0 0 * * 0 |
| @daily, @midnight | 0 0 * * * |
| @hourly | 0 * * * * |
| @reboot | — |
POSIX cron에는 없지만 거의 모든 구현이 받아들입니다.
흔히 걸려 넘어지는 곳
- 일과 요일을 둘 다 제한하면 cron은 둘 중 하나라도 맞는 날에 실행합니다. 둘 다 맞는 날이 아닙니다. "* * 3 * 1"은 매달 3일과 매주 월요일에 실행됩니다. 예외는 둘 중 하나가 별표로 시작할 때입니다. "* * */2 * 1"은 홀숫날이면서 월요일인 날에만 실행됩니다. 설명서는 이 점을 잘못 적어 두었습니다.
- 서버를, 그리고 cron도 함께 UTC로 돌리세요. 서머타임이 있는 시간대에서 쓴 일정은 해마다 한 번 실행을 건너뛰고 다음 전환 때 한 번 겹칩니다.
- 표준 cron에는 초나 연도 필드가 없습니다. 그만한 정밀도가 필요하다면 cron은 알맞은 도구가 아닙니다.
- @reboot은 피하세요. 기계가 어떻게 다시 켜졌는지, 그 순간 어떤 서비스가 준비됐는지에 좌우되어 헤아리기 어렵습니다.
- 다섯 필드에 담기지 않는 일정은 두 줄로 나눌 수 있습니다. 90분마다 실행하려면 "0 */3 * * *"과 "30 1/3 * * *"을 나란히 쓰세요.
- 명령은 절대 경로로 쓰세요. cron은 아주 짧은 PATH로 돌아가고 셸이 가진 환경 변수를 거의 물려받지 않습니다.
cron 표현식 자주 묻는 질문
다섯 필드는 무슨 뜻인가요?
차례대로 분, 시, 일, 월, 요일입니다. 별표가 있는 필드는 모든 값과 맞습니다.
일요일은 0인가요 7인가요?
둘 다입니다. 대부분의 구현이 일요일로 0과 7을 모두 받아들이고, SUN부터 SAT까지 세 글자 이름도 씁니다.
제 작업이 왜 예상한 시각에 실행되지 않았나요?
흔한 이유는 서버가 다른 시간대에 있는 것, 위에서 말한 일과 요일 규칙, 또는 cron이 셸 프로필을 읽지 않아 명령이 실패하는 것입니다.
이 페이지가 제 표현식을 어딘가로 보내나요?
아닙니다. 표현식 해석과 실행 시각 계산이 모두 브라우저 안에서 이루어지며 아무것도 전송되지 않습니다.