개발자 도구 · Crontab 생성기
Cron 단계 및 범위 구문: */15, 1-5, 목록 및 결합 방법
· 작동 방식
크론 일정 예약 개발자 워크플로
단계, 범위 및 목록은 사람들이 이해하지 못한 채 복사하는 cron 구문의 일부입니다. 이 게시물에서는 각각의 중첩 방법과 '7일마다'를 의미하지 않는 */7와 같은 놀라움에 대해 설명합니다.
15분마다, 9 ~ 5만 — 순진한 표현은 밤에도 실행됩니다.
"업무 시간 중 15분마다"에는 두 가지 독립적인 제한 사항이 포함되어 있습니다. 분 필드에는 15분 표시가 필요하고, 시간 필드에는 제한된 범위가 필요합니다. `*/15 * * * *`만 작성하면 전반부를 해결하고 밤새도록 실행을 생성합니다. 표현식은 평일에 대해 말하기 전에 두 제약 조건을 모두 인코딩해야 합니다.
ToolAcre는 명령이 아닌 5개의 일정 필드를 구문 분석합니다. `*/15 9-17 * * 1-5`으로 시작한 다음 문장을 검사하고 다음 실행 미리보기를 실행하세요. 이 검사는 `9-17`을 분 위치에 두거나 평일 필드를 제한 없이 두는 일반적인 실수를 포착합니다. 생성기는 표현식을 생성하고 설명합니다. 작업을 설치하거나 실행하지 않습니다.
범위 — 단일 필드 내의 포함 범위인 1-5 및 9-17
하이픈은 한 필드 내에 포함 범위를 만듭니다. 시간 위치의 `9-17`는 9부터 17까지 9개의 값으로 확장됩니다. 마찬가지로, 이 파서가 일요일을 0에, 월요일을 1에 매핑하기 때문에 평일 위치의 `1-5`은 월요일부터 금요일까지 확장됩니다. 두 끝점이 모두 참여하므로 17:00은 선택한 시간 범위 내에 있습니다.
범위는 필드 경계를 넘어갈 수 없습니다. 파서는 `17-9`와 같은 역방향 형식을 거부하고 원하는 값을 두 개의 목록 항목으로 분할하도록 제안합니다. 예약 상품마다 포장 규칙이 다르기 때문에 이러한 거부는 유용합니다. 여기서 범위는 항상 필드의 숫자 제한 또는 허용 이름 제한을 이미 충족하는 값 사이에서 위쪽으로 이동합니다.
단계 — */15 및 9-17/2, 및 단계가 연속적으로 계산되지 않고 필드의 하한에서 다시 시작되는 이유
슬래시는 시작점에서 매 n번째 값을 선택합니다. 분 필드의 `*/15`은 최소값인 0에서 시작하여 0, 15, 30 및 45로 확장됩니다. `9-17/2`는 9에서 시작하여 9, 11, 13, 15 및 17을 생성합니다. 단계는 하나의 필드에 속합니다. 시간 경계를 넘어 경과된 분은 계산되지 않습니다.
파서는 단계를 통한 간단한 시작도 허용합니다. 분 필드의 `5/15`은 암시적 상위 끝점이 59이므로 5, 20, 35 및 50를 의미합니다. 단계는 양의 정수여야 하며 필드의 전체 범위 크기를 초과할 수 없습니다. 0, 숫자가 아니거나 크기가 큰 단계는 추측된 해석 대신 필드별 검증 오류를 수신합니다.
목록은 하나의 필드에 값, 범위 및 단계별 범위를 결합할 수 있습니다.
쉼표는 동일한 필드 내에서 여러 부분을 결합합니다. 간단한 `1,15,30`는 3개의 분 값을 지정합니다. 보다 정교한 입력은 단일 값, 포함 범위 및 단계별 범위를 결합할 수 있습니다. 테스트된 `0,10-20/5,59`은 0, 10, 15, 20 및 59로 확장됩니다. 중복된 결과는 제거되고 확장된 값은 나중에 계산에서 사용되기 전에 정렬됩니다.
이 문법은 구성적이지만 여전히 좁습니다. 각 쉼표 항목에는 하나의 슬래시가 포함될 수 있으며 범위에는 비어 있지 않은 끝점이 정확히 2개 있어야 합니다. 잘못된 쉼표, 여러 개의 슬래시 또는 완료되지 않은 범위는 필드 이름을 지정하는 이유로 거부됩니다. 잘못된 구두점을 가장하지 않고 혼합 표현을 검토 가능하게 만드는 것은 전통적인 의미를 갖습니다.
작업 예: */15 9-17 * * 1-5 — 생성된 시간과 17:45 엣지 케이스 열거
`*/15 9-17 * * 1-5`의 분 값은 00, 15, 30 및 45입니다. 시간은 09부터 17까지입니다. 주중 값은 월요일부터 금요일까지입니다. 포함된 각 평일에 첫 번째 후보는 09:00이고 마지막 후보는 17:45입니다. 18이(가) 시간 범위를 벗어났기 때문에 18:00이 없습니다.
마지막 실행 에지는 필드 확장이 대화 속기보다 나은 이유를 보여줍니다. "9시부터 5시까지"는 한 독자에게는 17:00에 멈추고 다른 독자에게는 5시 전체 시간을 포함한다는 의미일 수 있습니다. Cron의 시간 필드는 시간 버킷을 선택한 다음 분 필드는 그 안의 위치를 선택합니다. 17:45을 원하지 않는 경우 원하는 경계에 다른 표현식이나 명령 측 논리가 필요합니다.
매월 1일부터 날짜 단계가 확장됩니다. 경과된 주 간격이 아닙니다.
`*/7`는 해당 필드의 최소값인 1에서 확장되어 해당 날짜가 존재하는 경우 1, 8, 15, 22 및 29를 생성합니다. 다음 달이 시작되면 필드가 1에서 다시 시작됩니다. 따라서 연속적으로 진행되는 7일 간격이 아닌 선택한 달력 날짜를 설명합니다. 2월과 짧은 달에는 높은 날짜가 부족합니다.
동일한 구문의 다른 필드에서는 시작 값이 다릅니다. `*/7`분은 0에 시작되는 반면, `*/7`일은 1에 시작됩니다. ToolAcre의 파서는 각 필드 사양에서 시퀀스를 파생하고 해당 미리보기는 달력 날짜를 검색합니다. 실제 주간 케이던스의 경우 월별 단계를 경과 기간으로 처리하는 대신 요일을 제한합니다.
지원되지 않는 연산자는 다른 cron 방언으로 해석되지 않고 거부됩니다.
이 5개 필드 구문 분석기는 `L`, `W`, `#` 또는 `?`을 구현하지 않습니다. 해당 문자는 자동으로 삭제되지 않으며 이식 가능한 crontab 구문으로 표시되지 않습니다. 6개의 필드도 거부되며, 추가 선행 위치는 이 경로가 읽는 형식이 아닌 초 중심 스케줄러 스타일에 속한다는 설명이 포함됩니다.
경계는 의도적입니다. 분, 시, 월, 월, 요일이 여기에서 완전한 위치 문법입니다. 다른 스케줄러에서 표현식을 이동하기 전에 해당 필드를 계산하고 해당 연산자를 식별하십시오. 생성기는 자체 방언의 유효성을 검사할 수 있습니다. Quartz, 시스템 달력 구문 또는 클라우드 서비스 변형을 인증할 수 없습니다.
요점: 단계는 '범위의 맨 아래부터 시작'을 의미하며 생성기는 확인할 수 있는 단어로 단계 표현식을 설명합니다.
범위는 포함 범위를 정의하고, 쉼표는 조각을 병합하고, 필드별 시작의 슬래시 샘플 값을 정의합니다. 이러한 작업을 순서대로 읽으면 조밀한 토큰이 검사할 수 있는 유한 세트로 변환됩니다. 또한 작성자가 다른 것을 의미했을 수 있는 복사된 문구에 의존하지 않고 17:45과 같은 가장자리를 설명합니다.
생성기를 검토 표면으로 사용하십시오. 표현식을 입력하고, 설명을 읽고, 경고를 검사하고, 의도한 구역에서 다음 5개의 벽시계 실행을 비교하십시오. 그런 다음 확인된 5개 필드를 사용자 환경의 실제 명령 옆에 배치합니다. 일정 구성과 작업 실행은 별도의 책임으로 유지됩니다.