Cron 구문 설명: 5개 필드 마스터하기

Cron의 5필드 구문은 기만적으로 단순하지만 매우 강력합니다. 이 가이드는 각 필드, 모든 특수 문자 및 '매분'에서 '홀수 달의 두 번째 화요일 오전 3시 47분'까지 일정을 만들기 위해 결합하는 방법을 관리하는 규칙을 분석합니다.

5개 필드

모든 cron 표현식은 특정 순서로 정확히 5개의 필드로 구성됩니다: 분 시간 일 월 요일. 각 필드가 제어하는 것과 유효한 범위를 이해하는 것은 올바른 표현식을 구성하는 데 필수적입니다.

분 필드(0-59)는 작업이 실행되는 시간의 분을 제어합니다. "0"은 정각(:00)을 의미하고, "30"은 30분(:30)을 의미하며, "*"는 매분을 의미합니다. 이것이 cron이 제공하는 가장 세밀한 제어입니다 - 표준 cron으로 하위 분 간격으로 작업을 예약할 수 없습니다.

시간 필드(0-23)는 24시간 형식을 사용합니다. "0"은 자정, "12"는 정오, "23"은 오후 11시입니다. AM/PM 표기법이 없습니다; cron은 24시간 형식만 이해합니다. 오후 2시를 원하면 "14"를 사용하세요. 오전 2시를 원하면 "2"(또는 "02", 선행 0은 선택 사항이며 무시됨)를 사용하세요.

일 필드(1-31)는 실행할 월의 날짜를 지정합니다. "1"은 월의 첫째 날, "15"는 중순, "31"은 31일이 있는 달의 마지막 날입니다. 모든 달에 이러한 날짜가 있는 것은 아니므로 29-31일에 주의하세요. 31일로 예약된 작업은 30일만 있는 달에는 실행되지 않습니다.

월 필드(1-12)는 작업이 실행되는 월을 제어합니다. "1"은 1월, "12"는 12월입니다. 범위(3월부터 6월까지 3-6) 또는 목록(분기별 작업을 위한 1,4,7,10)을 사용할 수 있습니다. 일부 cron 구현은 "jan" 또는 "JAN"과 같은 3자 월 약어를 허용하지만 숫자 값은 보편적으로 지원되며 이식성을 위해 권장됩니다.

요일 필드(구현에 따라 0-6 또는 1-7)는 실행할 요일을 지정합니다. 표준 cron은 일요일에 0, 월요일에 1부터 토요일에 6을 사용합니다. 일부 구현은 일요일에 7도 허용하여 0과 7이 모두 일요일에 유효합니다. 월과 마찬가지로 일부 cron 변형은 약어(sun, mon, tue 등)를 허용하지만 숫자 값이 가장 안전합니다.

이러한 필드가 상호 작용하는 방식을 이해하는 것이 중요합니다. 일과 요일이 모두 지정된 경우(와일드카드가 아닌 경우), 작업은 조건 중 하나가 참일 때 실행됩니다(AND 논리가 아닌 OR 논리). 이것은 "0 0 13 * 5"가 "13일의 금요일"에 실행될 것으로 예상하는 많은 사용자를 혼란스럽게 하지만 실제로는 "매월 13일 또는 매주 금요일"에 실행됩니다.

특수 문자 및 연산자

Cron의 힘은 복잡한 일정을 간결하게 표현할 수 있게 해주는 특수 문자에서 나옵니다. 별표(*)는 "모든 가능한 값"을 의미하며 가장 일반적인 특수 문자입니다. 분 필드에서 *는 매분(0-59)을 의미합니다. 월 필드에서 *는 매월(1-12)을 의미합니다.

쉼표 연산자(,)는 여러 특정 값을 나열합니다. 분 필드의 "0,15,30,45"는 매시간 :00, :15, :30, :45에 실행됩니다. 일 필드의 "1,15"는 1일과 15일에 실행됩니다. 필요한 만큼 많은 값을 나열할 수 있습니다: 홀수 날짜를 위한 "1,3,5,7,9,11".

하이픈(-)은 연속적인 값의 범위를 만듭니다. 요일 필드의 "1-5"는 월요일부터 금요일을 의미합니다. 시간 필드의 "9-17"은 오전 9시부터 오후 5시를 의미합니다. 범위는 포함적입니다 - 두 끝점이 모두 포함됩니다. "1-3"은 1, 2, 3을 의미합니다.

슬래시(/)는 단계 값 또는 간격을 만듭니다. 형식은 "*/N" 또는 "범위/N"입니다. 분 필드의 "*/5"는 "5분마다"를 의미합니다(0, 5, 10, 15, ..., 55). 시간 필드의 "*/2"는 "2시간마다"를 의미합니다(0, 2, 4, 6, ..., 22). 단계를 범위와 결합할 수 있습니다: "10-50/5"는 10, 15, 20, 25, 30, 35, 40, 45, 50을 의미합니다.

이러한 연산자는 단일 필드에서 결합될 수 있습니다. "1-5,10,15,20-25"는 유효하며 1부터 5, 10, 15, 20부터 25를 지정합니다. "*/10,55"는 10분마다 및 구체적으로 :55에(따라서 0, 10, 20, 30, 40, 50, 55).

일부 확장 cron 구현은 추가 특수 문자를 지원합니다. 일에서 "L"(마지막)은 월의 마지막 날을 의미합니다. "W"(평일)는 주어진 날짜에 가장 가까운 평일을 찾습니다. "#"는 요일의 N번째 발생을 지정합니다("두 번째 화요일"처럼). 이러한 확장은 강력하지만 보편적으로 지원되지 않습니다 - 표준 cron에는 포함되어 있지 않습니다.

물음표(?)는 일부 cron 구현에서 일 및 요일 필드의 "*"에 대한 별칭으로 나타납니다. 주로 명확성을 위해 존재합니다: 한 필드에 "?"를 사용하고 다른 필드에 특정 값을 사용하면 하나의 요일 유형만 제한하고 있음을 명확히 합니다. 표준 cron은 "?"를 지원하지 않습니다; 대신 "*"를 사용하세요.

연산자 우선 순위 및 조합 규칙을 이해하면 구문 오류를 방지할 수 있습니다. 범위는 오름차순이어야 합니다(1-5, 5-1 아님). 단계 값은 양수여야 합니다. 목록은 필드의 유효한 범위 내에 값을 가져야 합니다. 대부분의 cron 구현은 실행될 때까지 구문을 검증하지 않으므로 테스트가 중요합니다.

일반적인 구문 패턴

몇 가지 일반적인 구문 패턴을 마스터하면 대부분의 실제 일정 요구 사항을 다룹니다. 이러한 구성 요소는 거의 모든 일정에 대해 결합되고 조정될 수 있습니다.

간단한 정기 간격의 경우 단계 구문을 사용하세요: "*/N * * * *"는 N분마다 실행됩니다. "0 */N * * *"는 N시간마다(분 0에) 실행됩니다. 이 패턴은 모니터링, API 폴링 또는 주기적인 정리 작업에 일반적입니다.

특정 시간의 일일 작업의 경우 "M H * * *"를 사용하세요. 여기서 M은 분, H는 시간입니다. "0 2 * * *"는 매일 오전 2시에 실행됩니다. "30 14 * * *"는 매일 오후 2시 30분에 실행됩니다. 월 및 두 일 필드의 와일드카드는 "매일"을 의미합니다.

평일 전용 작업의 경우 "M H * * 1-5"를 사용하세요. "0 9 * * 1-5"는 월요일부터 금요일 오전 9시에 실행됩니다. 이 패턴은 평일 보고서 전송 또는 평일에만 작동하는 외부 비즈니스 시스템과의 통합 실행과 같은 영업일 전용 작업에 필수적입니다.

특정 요일의 경우 "M H * * D"를 사용하세요. 여기서 D는 0-6입니다. "0 0 * * 0"은 일요일 자정에 실행됩니다. "0 18 * * 5"는 금요일 오후 6시에 실행됩니다. 여러 날도 작동합니다: "0 8 * * 1,3,5"는 월요일, 수요일, 금요일 오전 8시에 실행됩니다.

월간 작업의 경우 "M H D * *"를 사용하세요. 여기서 D는 월의 날짜입니다. "0 0 1 * *"는 매월 1일 자정에 실행됩니다. "0 12 15 * *"는 매월 15일 정오에 실행되어 월 중순 처리에 완벽합니다.

특정 월 또는 계절의 경우 월 사양을 추가하세요: "M H D M *". "0 0 1 1 *"는 매년 1월 1일에 실행됩니다. "0 0 1 1,4,7,10 *"는 분기별로 실행됩니다. "0 0 1 6-8 *"는 6월, 7월, 8월 1일(여름 달)에 실행됩니다.

복잡한 일정의 경우 연산자를 창의적으로 결합하세요. "0 9-17/2 * * 1-5"는 평일에 9, 11, 13, 15, 17시에 실행됩니다 - 업무 시간 동안 2시간마다. "*/15 9-17 * * 1-5"는 15분마다 실행되지만 평일 업무 시간 동안만 실행됩니다.

이러한 패턴에 맞지 않는 일정이 필요한 경우 구성 요소로 분해하세요. 실행되어야 하는 시기(시간), 빈도(간격), 어떤 날(요일), 어떤 날짜(일), 어떤 월(월)에 대해 생각하세요. 그런 다음 이러한 제약 조건에 따라 각 필드를 구성하세요.

도구 사용해보기

Crontab Generator

Crontab Generator