크론 작업 형식 및 시간대

크론 작업은 반복되는 주기로 예약되며 unix-cron 기반 형식으로 지정됩니다. 작업이 하루에 여러 번 실행되거나 특정 날짜와 특정 달에 실행되도록 일정을 정의할 수 있습니다. (더 이상 사용하지 않는 것이 좋지만 기존 작업에는 계속 기존 App Engine 크론 구문이 지원됩니다.)

크론 작업 형식

Google Cloud 콘솔, Google Cloud CLI 또는 Cloud Scheduler REST API를 사용하여 일정을 설정할 수 있습니다.

일정은 작업 실행 시간을 나타내는 unix-cron 문자열 형식(* * * * *)을 사용하여 정의됩니다. 이 형식은 한 줄에 5개 필드로 설정됩니다.

시간 필드의 형식과 사용 가능한 값은 다음과 같으며 이 순서를 따라야 합니다.

|------------------------------- Minute (0-59)
|     |------------------------- Hour (0-23)
|     |     |------------------- Day of the month (1-31)
|     |     |     |------------- Month (1-12; or JAN to DEC)
|     |     |     |     |------- Day of the week (0-6; or SUN to SAT; or 7 for Sunday)
|     |     |     |     |
|     |     |     |     |
*     *     *     *     *
필드 유효한 값의 형식
0-59
시간 0-23
1-31
1-12 (또는 JAN에서 DEC까지)
요일 0-6 (또는 SUN에서 SAT까지, 또는 일요일의 경우 7)
  • 분: 정각에서 얼마의 시간이 지난 후 작업이 실행되는지 분 단위로 나타냅니다. 예를 들어 분이 0으로 설정되면 작업은 매시 정각에 실행됩니다(정각에서 0분 후이므로). 따라서 시간이 오전 8:00시이면 작업이 오전 8:00시에 실행됩니다.

  • 시간: 자정에서 얼마의 시간이 지난 후 작업이 실행되는지 시간 단위로 나타냅니다. 남은 시간(분)은 minute 필드에 표시되므로 가장 가까운 시간으로 내림됩니다. 자정은 0, 정오는 12입니다. 예를 들어 시간이 0으로 설정된 경우 자정 이후 0시간이므로 작업은 자정에 실행됩니다.

  • 날짜: 해당 월의 날짜를 나타냅니다. 예를 들어 1은 해당 월의 1일을 나타냅니다. Cloud Scheduler는 해당 월의 마지막 날을 의미하는 L을 지원하지 않습니다.

  • 월: 월을 나타냅니다. 월의 숫자 또는 월 이름의 처음 세 글자를 대문자로 지정합니다. 예를 들어 1월의 경우 1 또는 이에 상응하는 JAN입니다.

  • 요일: 요일을 나타냅니다. 월요일은 1이고 화요일은 2입니다. 0 또는 7는 일요일을 나타낼 수 있습니다. 요일을 숫자로 지정하거나 요일 이름의 처음 세 글자를 대문자로 지정합니다(예: 일요일의 경우 SUN).

    • 이 필드 중 하나가 별표(*)로 제한되지 않는day of the month 필드를 포함하는 포괄적 OR로 평가됩니다. 예를 들어 날짜를 1로 설정하고 요일을 SAT로 설정하면 작업이 1일에 실행됩니다. 그리고 1일이 토요일이 아니더라도 토요일마다 작업이 실행됩니다. 요일이 제한되지 않은 경우(*로 설정) 작업은 해당 월의 첫 번째 날에만 실행됩니다.

모든 값 일치

필드의 모든 값과 일치시키려면 별표(*)를 사용합니다. 필드가 별표로 설정되면 다른 필드 조건이 충족되기만 하면 필드가 해당 필드에서 유효한 모든 값과 일치합니다. 필드를 별표로 설정하면 필드가 특정 값으로 제한되지 않으므로 이 방식을 필드를 무제한으로 둔다고 지칭하기도 합니다.

다음 두 예시에서는 분 필드를 무제한으로 둡니다.

  • * 0 1 1 1: 작업이 1월 1일과 월요일 자정 시간에 1분마다 실행됩니다.
  • * * * * *: 작업이 1분마다 실행됩니다. 다른 각 필드도 무제한이므로 매시간, 매일, 매월 모든 요일에 실행됩니다.

별표는 범위의 특수한 경우, 즉 범위가 필드의 첫 번째 유효한 값으로 시작되고 필드의 마지막 유효한 값으로 끝나는 경우(예: 분 필드의 경우 0-59)와 같습니다.

범위 일치

값 범위와 일치시키려면 시작 값과 중지 값을 하이픈(-)으로 구분하여 지정합니다. 범위에 공백을 포함하지 마세요. 범위의 경계도 포함됩니다. 첫 번째 숫자는 두 번째 숫자보다 작아야 합니다. 월 또는 요일에 축약된 이름을 사용하는 경우(예: 1년의 첫 달에 1 대신 JAN 사용) 월 또는 요일 순서에서 첫 번째 값이 두 번째 값보다 앞서야 합니다.

다음 예시는 서로 동일하게 모든 달의 월요일, 화요일, 수요일, 목요일, 금요일에 실행됩니다.

  • 0 0 * * 1-5
  • 0 0 * * MON-FRI

목록 일치

목록에는 범위를 비롯하여 필드에 유효한 모든 값이 포함될 수 있습니다. 값을 쉼표(,)로 구분하여 지정하면 됩니다. 목록에 공백을 포함하지 마세요.

예:

  • 0 0,12 * * *: 작업이 자정과 정오에 실행됩니다.
  • 0-5,30-35 * * * *: 작업이 30분마다(매시 0분 및 매시 30분) 처음 5분간 1분마다 실행됩니다.

범위 값 건너뛰기

범위를 단계마다 건너뛸 비율을 지정하여 범위의 값을 건너뛸 수 있습니다. 이 방식을 단계 함수, 단계 또는 비율 표현식 사용이라고도 합니다. 이렇게 하려면 범위를 지정하고 슬래시(/)와 범위를 건너뛸 비율을 추가합니다.

별표(*)를 사용하여 필드의 모든 값 범위를 나타낼 수 있습니다. 별표를 사용하는 경우 범위의 첫 번째 값은 분, 시간, 요일(일요일) 필드에서는 0이고 날짜, 월 필드에서는 1입니다.

단계 값은 필드에서 가능한 최댓값보다 클 수 없습니다. 기본 단계는 1이므로 단계 함수 /1은 단계 함수를 사용하지 않는 것과 동일합니다.

다음은 범위에서 단계 함수를 사용하는 예시입니다.

  • */2: 모든 필드에 유효한 단계 함수입니다. 분 필드의 경우 0, 2, 4, ... , 58과 일치합니다. 시간에서는 0, 2, 4, ... , 22와 일치합니다. 날짜에서는 1, 3, 5, ... , 31(날짜 수가 31개인 달)과 일치합니다. 월에서는 1, 3, 5, ... , 11과 일치합니다. 요일에서는 0, 2, 4, 6과 일치합니다.

  • 0-12/2: 분 및 시간 필드에 유효한 단계 함수입니다. 0, 2, 4, ... , 12와 일치합니다.

다음은 일정에서 단계 함수를 사용하는 예시입니다.

  • */2 * * * *: 작업이 2분마다 실행됩니다.

  • 0 0-12/2 * * *: 작업이 2시간마다 정각에 실행됩니다. 첫 번째 실행은 자정입니다. 마지막 실행은 정오입니다.

샘플 일정

다음 표는 샘플 크론 작업 일정 몇 가지와 그 설명을 보여줍니다.

예약 크론 작업 형식 설명
1분마다 * * * * * 매분 실행됩니다. 예를 들면 오전 9시, 오전 9시 1분, 오전 9시 2분 등입니다.
1시간마다 0 * * * * 매시간 실행됩니다. 예를 들어 오전 9시, 오전 10시, 오전 11시 등입니다.
매일 0 0 * * * 매일 오전 12:00시(24시간 형식의 00:00)에 실행됩니다.
매주 평일
(월~금)
다음은 동일합니다.
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
월요일, 화요일, 수요일, 목요일, 금요일 오전 12:00시(24시간 형식의 00:00)에 실행
매주 다음은 동일합니다.
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
오전 12:00시(24시간 형식의 00:00)에 실행됩니다.
매월 0 0 1 * * 매월 1일 오전 12:00시(24시간 형식의 00:00)에 실행됩니다.
매 분기 다음은 동일합니다.
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
분기의 첫 번째 날 오전 12시(24시간 형식으로 00:00), 표준 분기별 일정(1월 1일, 4월 1일, 7월 1일, 10월 1일)에 실행됩니다.
매년 다음은 동일합니다.
  • 0 0 1 1 *
  • 0 0 1 JAN *
매년 첫 번째 달, 첫 번째 일(1월 1일) 오전 12:00시(24시간 형식: 00:00)에 실행됩니다.

시간대

작업을 만들 때 Google Cloud 콘솔(작업 만들기 페이지의 목록에서 시간대 선택) 또는 gcloud --time-zone 플래그를 통해 일정 계산에 사용할 시간대를 선택할 수 있습니다. 기본 시간대는 Etc/UTC입니다.

일부 시간대의 경우 일광 절약 시간으로 인해 작업이 예기치 않게 실행되거나 실행되지 않을 수 있습니다. 이는 Cloud Scheduler가 현지시간으로 작동하기 때문입니다. 시간이 뒤로 돌아가는 경우와 같이 작업이 예약된 시간이 두 번 발생할 가능성이 있는 경우, 예약된 작업이 비정상적으로 실행될 수 있습니다.

작업이 매우 정확한 주기로 실행되어야 하는 경우 일광 절약 시간을 시행하지 않는 시간대를 선택하는 것이 좋습니다. 특히 Cloud Scheduler에 UTC를 선택하면 이러한 문제가 완전히 배제됩니다.