본문으로 건너뛰기

Advanced Cron Expression Generator

시각적 인터페이스로 Cron 표현식을 쉽게 생성하고 이해합니다. 작업 스케줄링에 필수적인 도구입니다.

* = every, */5 = every 5, 0,15,30 = specific
* = every, */2 = every 2 hours, 9-17 = 9am-5pm
* = every, 1 = first day, 15 = 15th
* = every, 1 = January, 1,7 = Jan & Jul
* = every, 1 = Monday, 1-5 = weekdays
Cron Expression
* * * * *
Human Readable
every minute
Next 5 Executions (approximate)
  • 11/27/2025, 2:34:26 AM
  • 11/27/2025, 3:34:26 AM
  • 11/27/2025, 4:34:26 AM
  • 11/27/2025, 5:34:26 AM
  • 11/27/2025, 6:34:26 AM

Cron Syntax Guide

* - Any value
, - Value list separator
- - Range of values
/ - Step values

주요 기능

  • 9가지 프리셋: 자주 사용하는 스케줄 템플릿
  • 5개 필드 편집: Minute, Hour, Day, Month, Day of Week
  • 실시간 변환: 인간이 읽을 수 있는 형식으로 변환
  • 다음 실행 시간: 예정된 실행 시간 5개 표시
  • 구문 가이드: 각 특수 문자 의미 설명

Cron 표현식 구조

Cron 표현식은 5개 필드로 구성됩니다:

*    *    *    *    *
│ │ │ │ │
│ │ │ │ └─ Day of Week (0-6, 0=일요일)
│ │ │ └────── Month (1-12)
│ │ └─────────── Day of Month (1-31)
│ └──────────────── Hour (0-23)
└───────────────────── Minute (0-59)

특수 문자 의미

* (Asterisk) - 모든 값

모든 가능한 값을 의미합니다.

예시:

  • * * * * * → 매분마다 실행
  • 0 * * * * → 매시간 정각에 실행
  • 0 0 * * * → 매일 자정에 실행

, (Comma) - 값 목록

여러 개의 값을 지정합니다.

예시:

  • 0,15,30,45 * * * * → 0분, 15분, 30분, 45분에 실행
  • 0 9,12,18 * * * → 오전 9시, 낮 12시, 오후 6시에 실행
  • 0 0 * * 1,3,5 → 월, 수, 금요일 자정에 실행

- (Hyphen) - 범위

값의 범위를 지정합니다.

예시:

  • 0 9-17 * * * → 오전 9시부터 오후 5시까지 매시간
  • 0 0 1-7 * * → 매월 1일부터 7일까지 자정
  • 0 0 * * 1-5 → 평일(월-금) 자정에 실행

/ (Slash) - 간격

지정된 간격으로 실행합니다.

예시:

  • */5 * * * * → 5분마다 실행
  • 0 */2 * * * → 2시간마다 실행
  • 0 0 */3 * * → 3일마다 자정에 실행

프리셋 가이드

1. Every minute (매분)

* * * * *

가장 자주 실행되는 스케줄입니다.

사용 예시:

  • 실시간 모니터링
  • 로그 수집
  • 메트릭 수집

2. Every 5 minutes (5분마다)

*/5 * * * *

사용 예시:

  • API 헬스 체크
  • 데이터 동기화
  • 캐시 갱신

3. Every 15 minutes (15분마다)

*/15 * * * *

사용 예시:

  • 외부 API 호출
  • 상태 업데이트
  • 알림 체크

4. Every 30 minutes (30분마다)

*/30 * * * *

사용 예시:

  • 정기 데이터 백업
  • 리포트 생성
  • 큐 처리

5. Every hour (매시간)

0 * * * *

매시간 정각에 실행됩니다.

사용 예시:

  • 시간별 리포트
  • 로그 로테이션
  • 데이터 정리

6. Every day at midnight (매일 자정)

0 0 * * *

사용 예시:

  • 일일 백업
  • 일일 리포트
  • 데이터베이스 정리

7. Every Monday at 9am (매주 월요일 오전 9시)

0 9 * * 1

사용 예시:

  • 주간 리포트
  • 주간 백업
  • 주간 이메일

8. First day of month (매월 1일)

0 0 1 * *

사용 예시:

  • 월간 리포트
  • 월간 청구
  • 데이터 아카이빙

실전 활용 예시

예시 1: 업무 시간 동안 10분마다

*/10 9-17 * * 1-5

설명: 평일(월-금) 오전 9시부터 오후 5시까지 10분마다 실행

사용 시나리오:

  • 업무 시간 중 시스템 모니터링
  • 근무 시간 중 데이터 동기화

예시 2: 새벽 시간대 데이터베이스 백업

0 2 * * *

설명: 매일 새벽 2시에 실행

사용 시나리오:

  • 일일 데이터베이스 백업
  • 트래픽이 적은 시간대 작업

예시 3: 분기별 리포트

0 0 1 1,4,7,10 *

설명: 1월, 4월, 7월, 10월 1일 자정에 실행

사용 시나리오:

  • 분기별 재무 리포트
  • 분기별 데이터 분석

예시 4: 매 5분마다, 하지만 오전 9시부터 오후 6시까지만

*/5 9-18 * * *

설명: 오전 9시부터 오후 6시까지 5분마다 실행

사용 시나리오:

  • 업무 시간 중 빈번한 모니터링
  • 피크 시간대 메트릭 수집

예시 5: 주말마다 정오

0 12 * * 0,6

설명: 토요일과 일요일 낮 12시에 실행

사용 시나리오:

  • 주말 유지보수 작업
  • 주말 리포트 생성

플랫폼별 사용법

Linux/Unix Crontab

# crontab 편집
crontab -e

# crontab 내용 추가
0 0 * * * /path/to/backup.sh

Node.js (node-cron)

const cron = require('node-cron');

// 매일 자정에 실행
cron.schedule('0 0 * * *', () => {
console.log('Running daily backup');
});

Python (APScheduler)

from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()

@scheduler.scheduled_job('cron', hour=0, minute=0)
def daily_job():
print('Running daily backup')

scheduler.start()

Docker (Docker Compose)

version: '3'
services:
backup:
image: my-backup
environment:
- CRON_SCHEDULE=0 0 * * *

Kubernetes (CronJob)

apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: backup:latest
restartPolicy: OnFailure

일반적인 실수와 해결

1. 시간대(Timezone) 오류

문제: Cron이 예상과 다른 시간에 실행됩니다.

해결:

  • 서버의 시간대 확인: date
  • 시간대 설정: TZ=America/New_York 0 9 * * *

2. Day of Month와 Day of Week 동시 사용

0 0 13 * 5

이것은 "13일 금요일"이 아니라 "매월 13일 또는 모든 금요일"을 의미합니다.

올바른 방법:

  • 13일 금요일만: 스크립트에서 날짜 확인 필요

3. 범위와 간격 혼동

잘못된 예: 0-30/5 * * * * (0-30분 중 5분마다 = 0,5,10,15,20,25,30)

올바른 예: */5 * * * * (모든 시간에 5분마다)

4. 값 범위 초과

0 25 * * * (시간은 0-23까지만)

0 23 * * * (오후 11시)

테스트 및 디버깅

1. Cron 표현식 검증

온라인 도구로 검증:

2. 로그 확인

# Linux cron 로그
tail -f /var/log/cron

# macOS cron 로그
tail -f /var/log/system.log | grep cron

3. 테스트 실행

# 직접 스크립트 실행하여 테스트
/path/to/your/script.sh

# 디버그 모드로 cron 실행
CRON_DEBUG=1 cron

성능 최적화

1. 동시 실행 방지

#!/bin/bash
# 락 파일로 중복 실행 방지
LOCKFILE=/tmp/backup.lock

if [ -f "$LOCKFILE" ]; then
echo "Already running"
exit 1
fi

touch "$LOCKFILE"
# 실제 작업 수행
rm "$LOCKFILE"

2. 타임아웃 설정

# 30분 타임아웃
timeout 30m /path/to/script.sh

3. 리소스 제한

# CPU 사용량 제한
nice -n 19 /path/to/script.sh

보안 고려사항

1. 환경 변수 관리

Cron은 제한된 환경 변수만 제공합니다.

# crontab에 환경 변수 설정
PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash

0 0 * * * /path/to/script.sh

2. 권한 관리

# 최소 권한 원칙
# root 대신 특정 사용자로 실행
crontab -u username -e

3. 로그 저장

# 표준 출력과 에러를 모두 로그에 저장
0 0 * * * /path/to/script.sh >> /var/log/backup.log 2>&1

관련 도구

추가 자료