viewer.csslab.dev

Quartz cron 표현식 해석기

Quartz 표현식을 말로 옮긴다 — 여섯·일곱 필드와 ? L W # 까지.

Quartz cron 은 무엇이 다른가?

Quartz 는 유닉스 crontab 이 다섯 필드를 쓰는 자리에 여섯 또는 일곱을 쓴다. 앞에 붙는 필드가 초이고, 뒤에 선택적으로 연도가 붙는다. 이것만으로도 둘 사이에 옮긴 표현식이 대부분 깨진다 — 다섯 필드짜리 crontab 줄을 Quartz 에 붙여넣으면 초부터 요일까지로 읽혀, 09:00 에 돌리려던 작업이 전혀 다른 시각에 돈다.

Quartz 에는 crontab 에 대응이 없는 문자도 있다. ? 는 "지정하지 않음"이고 일과 요일 중 정확히 하나에 반드시 들어가야 한다 — Quartz 가 둘 다 지정하는 것을 금지하기 때문이다. L 은 마지막 날, W 는 가장 가까운 평일, # 은 그 달의 n번째 요일을 고른다. "둘째 금요일"을 적으려면 이 문법이 필요하다.

Cron expressions are comprised of 6 required fields and one optional field.
Quartz — CronTrigger 튜토리얼

기능

초와 연도 필드
여섯·일곱 필드에 이름을 제대로 붙인다. 값이 엉뚱한 자리에 들어간 것을 엉뚱한 시각에 도는 것으로 짐작하는 대신 눈으로 본다.
? 규칙이 보이게
Quartz 는 일과 요일 중 정확히 하나에 ? 를 요구한다. 표현식을 말로 되돌려 읽는 것이 둘 다 * 로 둔 것을 잡는 방법이다 — Quartz 는 그걸 그냥 거부한다.
L·W·# 을 풀어 준다
문법 표와 대조하게 두지 않고, 실제로 붙여넣은 그 표현식에서 이 문자들이 무슨 일을 하는지 말해 준다.
실행 시각은 일부러 안 준다
Quartz 전용 문자를 쓴 표현식에는 다음 실행 시각을 붙이지 않는다. 쓸 수 있는 파서들이 ? 와 L 을 Quartz 와 다르게 읽는데, 스케줄을 확인하러 온 페이지에서 틀린 시각을 보여주는 것은 안 보여주는 것보다 나쁘다.

사용법

  1. 1

    표현식을 붙여넣는다

    여섯 필드(맨 앞이 초) 또는 뒤에 연도가 붙은 일곱 필드.

  2. 2

    문장을 읽는다

    입력 바로 아래에 표현식을 말로 옮긴 문장이 나온다.

  3. 3

    필드 분해를 확인한다

    필드마다 이름이 붙어 있어, 실수로 붙여넣은 crontab 표현식이 한 필드 모자란 것으로 바로 드러난다.

  4. 4

    Quartz 에서 직접 확인한다

    ? L W # 을 쓴 표현식은 실제 스케줄러에서 실행 시각을 확인한다 — 이 페이지는 일부러 짐작하지 않는다.

자주 묻는 질문

Quartz cron 표현식은 필드가 몇 개인가?

여섯 개가 필수다 — 초·분·시·일·월·요일 — 이고 일곱 번째로 연도가 선택이다. 유닉스 crontab 은 다섯이고 초 필드가 없다. 표현식이 둘 사이를 그대로 오가지 못하는 이유다.

Quartz 의 ? 는 무슨 뜻인가?

지정하지 않음이다. Quartz 는 일과 요일을 둘 다 제한하는 것을 허용하지 않으므로 둘 중 정확히 하나가 ? 여야 한다. 둘 다 * 로 두면 오류이고, crontab 줄을 옮길 때 가장 흔히 저지르는 실수다.

L·W·# 은 뭔가?

L 은 그 달의 마지막 날 또는 마지막 해당 요일, W 는 주어진 날에 가장 가까운 평일, # 은 그 달의 n번째 요일을 고른다. 6#2 는 둘째 금요일이다. 표준 crontab 에는 셋 다 없다.

crontab 표현식을 붙여넣어도 설명이 나오는 이유는?

설명이 필드 개수로 만들어지기 때문이다. 다섯 필드짜리는 crontab 으로 설명되고 그건 맞다 — 다만 Quartz 는 초 필드를 요구하므로 그 표현식을 거부한다. 필드 분해가 그 어긋남을 보여 준다.

Spring 도 같은 문법인가?

Spring 의 @Scheduled 는 Quartz 처럼 초가 앞에 붙은 여섯 필드를 받지만 연도 필드가 없고 L 과 # 의 처리가 버전마다 다르다. 기본 필드를 넘어서는 것은 쓰는 Spring 버전에서 확인한다.

여기서 막힌다면

이 도구가 따르는 규격

함께 쓰는 도구