Utilo

크론 표현식 예제: 30 개의 스케줄이 설명되어 있습니다.

크론 문법을 필드별로 학습하고 N분, 평일, 월간 작업, 영업시간 등 모든 시간대 함정에 대한 30개의 테스트된 크론 표현을 복사합니다.

· 4분 분량

크론은 1970년대부터 유닉스 시스템에서 반복되는 작업을 스케줄링해 왔으며, 5개 필드 문법은 이제 쿠버네티스 크론잡스, 기타허브 액션, AWS 이벤트브리지와 구글 클라우드 스케줄러, CI 파이프라인과 수많은 작업 라이브러리를 구동한다. 문법은 기억하기에 충분히 콤팩트하지만 대부분의 엔지니어가 잘못된 시간에 실행된 적어도 하나의 스케줄을 배포할 정도로 미묘합니다. 이 안내서는 각 분야에 대해 설명하고, 그 다음에는 30개의 실용적인 표현과 함정에 대한 메모를 나열합니다.

5개의 필드

┌───────────── minute (0–59)
│ ┌─────────── hour (0–23)
│ │ ┌───────── day of month (1–31)
│ │ │ ┌─────── month (1–12 or JAN–DEC)
│ │ │ │ ┌───── day of week (0–6 or SUN–SAT; 7 is also Sunday on most systems)
│ │ │ │ │
* * * * *

각 필드는 다음을 허용합니다.

  • * 모든 값
  • 숫자 5은 정확히 5입니다.
  • 리스트 1,15는 1과 15을 의미합니다.
  • 범위 9-17는 9부터 17까지를 의미합니다.
  • 한 단계 */15은 최소값부터 시작하여 15번째 값을 의미하며, 10-50/20는 10, 30, 50를 의미합니다.

작업은 현재 시간이 아래에서 다루는 중요한 예외를 제외하고 모든 필드와 일치할 때 실행됩니다. 어떤 표현식도 [cron expression parser] ((/tools/cron-parser) 에 붙여서 일반 언어 설명과 다음 실행 시간을 볼 수 있습니다.

N 분 또는 시간마다

  1. * * * * * 매 분
  2. */5 * * * * 5분마다 (:00:00,:05,:10 ...).
  3. */15 * * * * 15분마다
  4. 0,30 * * * * 30분마다, 1시간 30분 후
  5. 7 * * * * 매 시간 7분 후 홀수 분을 선택하면 바쁜 시간으로부터 짐을 분산시킵니다.
  6. 0 */2 * * * 2시간마다 00:0002:0004:00...
  7. 0 */6 * * * 하루에 네 번 00:00, 06:00, 12:00, 18:00
  8. 15 8-18/2 * * * 8시 15분, 10시 15분, 12시 15분, 14시 15분, 16시 15분, 18시 15분

** Pitfall:** 단계는 모든 경계에서 다시 시작합니다. */7은 분기 필드에서:00,:07...:56에서 발사되고 다시:00에 발사됩니다. 그래서 시간 간격은 7가 아니라 4분입니다. 60을 나누지 않는 고정된 간격이 필요하다면, 간격을 지원하는 스케줄러를 사용하거나 작업 체크 시간이 스스로 지나도록 하세요.

일일 일정

  1. 0 0 * * * 매일 밤 12시에
  2. 매일 2시 30분에 30 2 * * *
  3. 0 9,17 * * * 매일 9시와 17시
  4. 0 12 * * * 정오
  5. 45 23 * * *는 밤 12시 45분, 낮의 보고를 위해

Pitfall: 지역 시간으로 01:00~03:00 사이의 작업은 낮 절약 전환에 두 번 건너뛰거나 실행될 수 있습니다. 만약 서버가 DST를 사용하는 영역을 사용한다면, 그 창 밖의 중요한 작업을 스케줄링하거나 UTC로 서버를 실행하세요.

평일과 주말

  1. 0 9 * * 1-5 월요일부터 금요일까지 09:00
  2. */10 9-17 * * 1-5 평일 오프닝 시간 동안 10분마다 (최후 17시 50분)
  3. 0 10 * * 6,0 토요일과 일요일 10시
  4. 0 8 * * MON 매주 월요일 08:00 이름들은 대부분의 구현에서 대소문으로 구분되지 않습니다.
  5. 30 16 * * 5 금요일 16시 30분

월간 및 연간

  1. 0 0 1 * * 매월 첫날 자정
  2. 0 6 15 * * 매월 15일 06:00
  3. 1일과 15일에 0 0 1,15 * * 월급에 통용됩니다.
  4. 0 0 1 1 * 1월 1일 자정
  5. 0 9 1 */3 * 매 분기 첫날 (일간, 4월, 7월, 10월) 9시
  6. 0 0 L * * 달의 마지막 날 ** 참고:** L는 쿼츠, 일부 클라우드 스케줄러 및 몇 개의 라이브러리가 지원하는 확장 프로그램이지만, 클래식 UNIX 크론은 지원하지 않습니다.
  7. 0 22 28-31 * *은 스크립트 내부의 체크 ([ "$(date -d tomorrow +%d)" = "01" ]) 과 결합하여 표준 크론으로 달의 마지막 날에 실행할 수 있는 휴대용 방법입니다.

달의 날, 아니면 주일의 날?

  1. 0 9 13 * 5 많은 사람들이 이것을 "금요일 13일"이라고 읽습니다. 클래식 크론에서 이것은 월의 13일마다 그리고 매주 금요일를 의미합니다. 두 일 필드가 제한되어 있을 때 (*도 제한되어 있지 않습니다.), Vixie cron 및 그 후손들은 이거나가 일치할 때 작업을 실행합니다.

13일 금요일만 실행하려면 0 9 13 * *를 스케줄링하고 스크립트에서 평일 날짜를 확인하거나, 명시적인 AND 의미와 함께 스케줄러를 사용하세요. 이것은 크론에서 가장 놀라운 규칙이고 기억할 가치가 있습니다.

특수 끈

많은 크론 구현은 단축키를 허용합니다:

  1. @hourly 0 * * * *와 동일합니다
  2. @daily 또는 @midnight 0 0 * * *.
  3. @weekly — 0 0 * * 0.
  4. @reboot 시작시 한 번 (유닉스 크론만; 쿠버네티스 또는 깃허브 액션에서는 사용할 수 없습니다.)

플랫폼 차이

  • Kubernetes CronJobs는 표준 5개 필드 문법을 사용합니다. 쿠버네티스 1.27부터 spec.timeZone: "Europe/Berlin"을 설정할 수 있습니다. 그렇지 않으면 스케줄은 컨트롤러 관리자의 구역을 따라, 일반적으로 UTC입니다.
  • GitHub Actions 스케줄은 항상 UTC에서 실행되며, 높은 부하 기간 동안 지연될 수 있으며, 최소 간격은 5분입니다. 정밀도가 중요하다면 0 * * * *을 피하세요. 홀수 분을 선택하세요.
  • AWS EventBridge는 6개의 필드 (minute hour day-of-month month day-of-week year) 를 사용하며 2개의 일기 필드 중 하나에서 ?를 요구합니다.
  • **쿼츠 (자바) **와 스프링는 초 먼저: 0 0 9 * * MON-FRI 6 또는 7 개의 필드를 사용합니다.
  • ** 시스템 타이머**는 다른, 더 읽기 쉬운 문법을 사용 (OnCalendar=Mon..Fri 09:00) 및 Persistent=true와 놓친 실행을 처리.

표현식을 복사하기 전에 플랫폼이 어떤 방언을 기대하는지 항상 확인하세요.

시간대

크론은 스케줄러의 시간대에 있는 표현을 평가합니다. 도쿄의 개발자가 0 9 * * *로 작성한 작업은 도쿄의 UTC 서버에서 UTC 09:00에서 실행됩니다. 권고 사항:

  • UTC에서 서버와 스케줄러를 실행하고 스케줄을 작성할 때 의도된 현지 시간을 UTC로 변환합니다.
  • 만약 작업이 DST 변경에 따라 현지 근무 시간을 따라야 한다면, 명시적인 시간대를 지원하는 스케줄러를 사용하세요.
  • UTC에서 실행되는 각 시간표를 로그 [유닉스 시간표 가이드] ((/blog/unix-timestamp-explained) 를 참조하십시오.

일자리 확충

정확한 타이밍은 절반의 승리일 뿐이야

  • ** 중복을 방지합니다.** 만약 작업이 그 간격보다 더 오래 실행될 수 있다면, 잠금 (flock UNIX에서, concurrencyPolicy: Forbid Kubernetes에서) 을 사용하십시오.
  • 직업이 무력화되도록 한다. 두 번 실행되는 작업, 예를 들어 재시험 또는 DST 중복 후, 고객에게 두 배의 요금을 부과해서는 안 된다.
  • ** 캡처 출력. * * 클래식 크론 전자 메일 출력 로컬 사용자, 일반적으로 아무데도 가지 않습니다. 로그로 리디렉트하고 장애에 대한 경고.
  • ** 절대 경로를 사용하십시오.** 크론은 최소한의 환경과 PATH으로 실행됩니다. 셸에서 작동하는 스크립트는 종종 크론에서 실패합니다.
  • 음성을 감시하는 장치. 직무가 확인되지 않을 때 경고하는 심장 박동 서비스

요약

크론의 5개의 필드 (분, 시간, 달의 날, 달, 주일의 날) 는 목록, 범위 및 단계와 결합하여 거의 모든 반복된 스케줄을 커버합니다. 양쪽 필드가 설정될 때 OR 규칙, 경계에서 리셋되는 단계, 01:0003:00 주위의 DST 및 추가 필드가 있는 플랫폼 방언을 관찰하십시오. 모든 표현식을 배포하기 전에 앞으로 실행되는 것을 보여주는 분석기로 확인합니다.

이 페이지는 영어에서 자동 번역되었습니다. 오류를 발견하시면 알려 주세요.

관련 가이드