Cron 표현식 가이드
Cron은 복잡한 스케줄링을 위한 강력한 도구입니다. 특정 시간, 요일, 날짜에 작업을 실행할 수 있습니다.
표현식 구조
┌───────────── 분 (0 - 59)
│ ┌───────────── 시 (0 - 23)
│ │ ┌───────────── 일 (1 - 31)
│ │ │ ┌───────────── 월 (1 - 12)
│ │ │ │ ┌───────────── 요일 (0 - 6, 0=일요일)
│ │ │ │ │
* * * * *
필드 값
| 필드 |
허용 값 |
특수 문자 |
| 분 |
0-59 |
*, ,, -, / |
| 시 |
0-23 |
*, ,, -, / |
| 일 |
1-31 |
*, ,, -, /, ? |
| 월 |
1-12 |
*, ,, -, / |
| 요일 |
0-6 (0=일) |
*, ,, -, /, ? |
특수 문자
| 문자 |
의미 |
예시 |
* |
모든 값 |
* * * * * = 매분 |
, |
값 목록 |
1,3,5 * * * * = 1분, 3분, 5분 |
- |
범위 |
0-5 * * * * = 0분부터 5분까지 |
/ |
간격 |
*/10 * * * * = 10분마다 |
? |
특정 값 없음 (일/요일) |
|
일반적인 패턴
매주 실행
| 표현식 |
설명 |
0 9 * * 1 |
매주 월요일 아침 9시 |
0 9 * * 1-5 |
매주 평일 아침 9시 |
0 9 * * 6 |
매주 토요일 아침 9시 |
0 12 * * 0 |
매주 일요일 점심 12시 |
요일 숫자: 0=일요일, 1=월요일, 2=화요일, 3=수요일, 4=목요일, 5=금요일, 6=토요일
매일 실행
| 표현식 |
설명 |
0 9 * * * |
매일 아침 9시 |
0 0 * * * |
매일 자정 |
0 12 * * * |
매일 점심 12시 |
30 18 * * * |
매일 저녁 6시 30분 |
0 */6 * * * |
6시간마다 (0시, 6시, 12시, 18시) |
매월 실행
| 표현식 |
설명 |
0 9 1 * * |
매월 1일 아침 9시 |
0 9 15 * * |
매월 15일 아침 9시 |
0 9 1,15 * * |
매월 1일, 15일 아침 9시 |
특정 간격
| 표현식 |
설명 |
*/5 * * * * |
5분마다 |
*/15 * * * * |
15분마다 |
*/30 * * * * |
30분마다 |
0 */2 * * * |
2시간마다 |
복잡한 패턴
| 표현식 |
설명 |
0 9-17 * * 1-5 |
평일 업무시간 (9-17시) 매시 |
0 9,12,18 * * * |
매일 9시, 12시, 18시 |
*/10 9-17 * * 1-5 |
평일 업무시간 10분마다 |
실전 예시
매일 아침 뉴스 요약
triggers:
- type: cron
expression: "0 8 * * *"
action: morning_news
주간 보고서 생성
triggers:
- type: cron
expression: "0 17 * * 5"
action: weekly_report
매월 데이터 정리
triggers:
- type: cron
expression: "0 2 1 * *"
action: monthly_cleanup
시간대 설정
로컬 시간대
timezone: "Asia/Seoul"
triggers:
- type: cron
expression: "0 9 * * *"
action: task
개별 시간대
triggers:
- type: cron
expression: "0 9 * * *"
timezone: "Asia/Seoul"
action: korea_task
- type: cron
expression: "0 9 * * *"
timezone: "America/New_York"
action: ny_task
일반적인 시간대
| 시간대 |
설명 |
Asia/Seoul |
한국 표준시 (KST) |
America/New_York |
미 동부 시간 (EST/EDT) |
America/Los_Angeles |
미 서부 시간 (PST/PDT) |
Europe/London |
영국 시간 (GMT/BST) |
Asia/Tokyo |
일본 표준시 (JST) |
UTC |
협정 세계시 |
Cron vs Heartbeat 선택
| 상황 |
권장 |
이유 |
| 매일 아침 9시 |
Cron |
특정 시간 지정 |
| 10분마다 |
Heartbeat |
단순 간격 |
| 매주 금요일 |
Cron |
요일 지정 |
| 매월 1일 |
Cron |
날짜 지정 |
| 평일 업무시간만 |
Cron |
복잡한 조건 |
트러블슈팅
예상 시간에 실행되지 않음
원인: 시간대 설정 오류
# 현재 시간대 확인
openclaw config get timezone
해결: timezone: "Asia/Seoul" 명시적 설정
요일이 잘못 실행됨
원인: 요일 숫자 오해 (0=일요일)
# 올바른 예
expression: "0 9 * * 0" # 일요일
expression: "0 9 * * 1" # 월요일
너무 자주 실행됨
# 올바른 예
expression: "*/30 * * * *" # 30분마다
expression: "0 */2 * * *" # 2시간마다
빠른 참조
| 원하는 스케줄 |
표현식 |
| 매분 |
* * * * * |
| 매시 정각 |
0 * * * * |
| 매일 자정 |
0 0 * * * |
| 매일 아침 9시 |
0 9 * * * |
| 5분마다 |
*/5 * * * * |
| 매주 일요일 |
0 0 * * 0 |
| 매주 월요일 아침 9시 |
0 9 * * 1 |
| 매월 1일 |
0 0 1 * * |
| 평일 아침 9시 |
0 9 * * 1-5 |
참고: