alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

Cron 표현식 치트시트 — 프로처럼 스케줄링하기

Cron은 Unix 계열 시스템에서 예약 작업 자동화의 근간입니다. 로그 로테이션, 데이터베이스 백업 실행, CI/CD 파이프라인 트리거 등 cron 표현식은 해당 작업이 언제 실행되는지를 정의합니다. 구문은 간결하지만 강력하며, 추측으로는 쉽게 실수할 수 있습니다.

이 레퍼런스는 실용적인 복사-붙여넣기 예제와 함께 cron 구문의 모든 부분을 다룹니다. 대화형으로 표현식을 구축하고 검증하려면 이 가이드와 함께 Cron 표현식 빌더를 열어보세요.

Cron 구문: 5개 필드

표준 cron 표현식은 공백으로 구분된 5개 필드로 구성됩니다:

┌───────────── 분 (0–59)
│ ┌───────────── 시 (0–23)
│ │ ┌───────────── 일 (1–31)
│ │ │ ┌───────────── 월 (1–12)
│ │ │ │ ┌───────────── 요일 (0–7, 0과 7은 일요일)
│ │ │ │ │
* * * * *

각 필드는 특정 값, 범위, 목록 또는 와일드카드를 허용합니다. 다섯 필드가 합쳐져 정확한 반복 스케줄을 지정합니다.

필드허용 값특수 문자
0–59* , - /
0–23* , - /
1–31* , - /
1–12* , - /
요일0–7* , - /

월과 요일 필드는 대부분의 구현에서 3글자 약어(JANDEC, SUNSAT)도 허용합니다.

특수 문자 설명

4개의 특수 문자를 이해하면 cron의 모든 기능을 활용할 수 있습니다:

별표 * — "모든"

해당 필드의 가능한 모든 값과 일치합니다.

* * * * *    # 매일 매시간 매분 실행

쉼표 , — "그리고"

개별 값 목록을 지정합니다.

0 9,12,18 * * *    # 매일 오전 9시, 오후 12시, 오후 6시에 실행

하이픈 - — "~까지"

포함 범위를 정의합니다.

0 9-17 * * *    # 오전 9시부터 오후 5시까지 매시간 실행

슬래시 / — "n번째마다"

범위 시작부터의 단계 간격을 설정합니다.

*/10 * * * *    # 10분마다 (0, 10, 20, 30, 40, 50)

범위와 단계를 결합할 수 있습니다:

0 9-17/2 * * *    # 오전 9시부터 오후 5시까지 2시간마다 (9, 11, 13, 15, 17)

자주 사용하는 Cron 스케줄 예제

이 표를 북마크하세요. 반복적으로 사용할 스케줄입니다.

스케줄표현식설명
매분* * * * *매분 시작 시 실행
5분마다*/5 * * * *0, 5, 10, 15, …, 55분
15분마다*/15 * * * *0, 15, 30, 45분
매시간0 * * * *매시간 0분에 실행
6시간마다0 */6 * * *00:00, 06:00, 12:00, 18:00
매일 자정0 0 * * *하루 1회 00:00에 실행
매일 오전 3시0 3 * * *하루 1회 03:00에 실행
매주 월요일 오전 9시0 9 * * 1매주 월요일 09:00에 실행
평일 매일 오전 8시0 8 * * 1-5월요일~금요일 08:00
주말 정오0 12 * * 0,6토요일, 일요일 12:00
매월 1일0 0 1 * *매월 1일 자정
분기마다 (1,4,7,10월)0 0 1 1,4,7,10 *분기 월 1일 자정
업무시간 중 15분마다*/15 9-17 * * 1-5평일 9시~17시, 15분마다

모든 표현식을 Cron 표현식 빌더에 붙여넣어 다음 실행 시간을 시각화할 수 있습니다.

고급 패턴

목록과 범위 결합

필드는 혼합 구문을 허용합니다. 평일 오전 8시와 오후 6시에 작업을 실행하려면:

0 8,18 * * 1-5

단계로 특정 월을 지정하려면:

0 0 1 1-12/3 *    # 1월부터 3개월마다 (1월, 4월, 7월, 10월)

일 vs. 요일

일과 요일이 모두 설정된 경우(*가 아닌 경우), 동작은 구현에 따라 다릅니다. 표준 cron에서는 어느 하나의 조건이 충족되면 작업이 실행됩니다 — AND가 아닌 OR 관계입니다. 이것은 많은 사람을 놀라게 합니다.

0 0 15 * 1    # 15일과 매주 월요일에 실행 — "15일인 월요일"이 아닙니다

부팅 시 실행

엄밀히 cron 표현식은 아니지만, @reboot는 널리 지원되는 단축어입니다:

@reboot /usr/local/bin/start-service.sh

기타 일반적인 단축어:

단축어동등한 표현식
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

다양한 환경에서의 Cron

5필드 구문은 보편적이지만, cron 설정 방법은 플랫폼에 따라 다릅니다.

Linux Crontab

전통적인 방식입니다. crontab -e로 사용자 crontab을 편집합니다:

# 매일 오전 2시에 백업 실행
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

/etc/cron.d/의 시스템 전체 cron 작업에는 사용자 필드가 추가됩니다:

0 2 * * * root /usr/local/bin/cleanup.sh

GitHub Actions

GitHub Actions는 schedule 트리거 내에서 동일한 5필드 구문을 사용합니다. 모든 시간은 UTC입니다.

on:
  schedule:
    - cron: '0 3 * * 1-5'   # 평일 UTC 오전 3시

YAML 설정에 대한 자세한 내용은 Kubernetes를 위한 YAMLDocker Compose를 위한 YAML을 참조하세요.

Kubernetes CronJob

Kubernetes는 cron 표현식을 CronJob 리소스로 래핑합니다:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: report
              image: reporting:latest
              command: ["python", "generate_report.py"]
          restartPolicy: OnFailure

Kubernetes는 기본적으로 UTC를 사용합니다. v1.25부터 CronJob 스펙에서 timeZone: "America/New_York"을 설정할 수 있습니다.

AWS CloudWatch (EventBridge)

AWS는 6개 필드(초 추가)와 rate() / cron() 래퍼를 사용하는 약간 다른 구문을 사용합니다:

cron(0 3 * * ? *)    # 매일 UTC 오전 3시

? 문자에 주의하세요 — AWS에서는 다른 하나가 지정된 경우 일 또는 요일에 ?가 필요합니다. 이는 표준 cron과 다릅니다.

일반적인 함정

1. 타임존 혼동

Cron은 Linux에서 시스템 타임존을 기본으로 사용하지만, Kubernetes와 GitHub Actions는 UTC로 실행됩니다. 0 9 * * *로 예약된 작업은 UTC 오전 9시에 실행되며, 한국 시간으로는 오후 6시입니다.

스케줄러가 어떤 타임존을 사용하는지 항상 확인하세요. 타임스탬프 변환에 대해서는 Unix 타임스탬프 설명 가이드에서 UTC 오프셋을 자세히 다룹니다.

2. 실행 겹침

작업이 실행 간격보다 오래 걸리면 겹치는 인스턴스가 발생합니다. */5 * * * * 스케줄에서 8분이 걸리는 스크립트는 쌓이게 됩니다.

해결책:

  • 잠금 파일 사용 (Linux의 flock)
  • Kubernetes CronJob에서 concurrencyPolicy: Forbid 설정
  • 스크립트 시작 시 실행 중인 인스턴스 확인

3. 출력 누락과 디버깅

Cron은 기본적으로 stdout을 캡처하지 않습니다. 항상 출력을 리디렉션하세요:

*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

cron 작업이 실행되지 않는 경우 확인사항:

  • grep CRON /var/log/syslog로 실행 로그 확인
  • 스크립트 파일 권한
  • PATH 환경 변수 — cron은 기본적으로 최소한의 PATH를 가짐

4. "매월 31일" 함정

0 0 31 * *    # 31일이 있는 달에만 실행

이것은 1월, 3월, 5월, 7월, 8월, 10월, 12월에 실행되지만 나머지 5개월은 조용히 건너뜁니다. 월말 작업이 필요하다면 1일에 실행하고 스크립트 로직을 조정하거나, "월의 마지막 날" 의미론을 지원하는 도구를 사용하는 것을 고려하세요.

5. Crontab 끝의 줄바꿈 누락

일부 cron 구현에서는 crontab 파일 끝에 줄바꿈이 필요합니다. 마지막 항목이 실행되지 않으면 끝에 빈 줄을 추가하세요.

시각적으로 표현식 구축하기

구문 암기는 일반적인 패턴에는 효과적이지만, 복잡한 스케줄은 시각적으로 구축하는 것이 더 쉽습니다. alltools.one의 Cron 표현식 빌더에서:

  • 드롭다운으로 각 필드의 값 선택
  • 스케줄의 사람이 읽을 수 있는 설명 확인
  • 향후 실행 시간 미리보기
  • 원클릭으로 최종 표현식 복사

완전히 브라우저에서 실행되며, 데이터는 서버로 전송되지 않습니다.

빠른 참조 카드

이 블록을 프로젝트 문서나 팀 위키에 복사하세요:

# ┌───── 분 (0-59)
# │ ┌───── 시 (0-23)
# │ │ ┌───── 일 (1-31)
# │ │ │ ┌───── 월 (1-12)
# │ │ │ │ ┌───── 요일 (0-7, 일=0 또는 7)
# │ │ │ │ │
# * * * * *

*/5 * * * *        # 5분마다
0 * * * *          # 매시간
0 0 * * *          # 매일 자정
0 9 * * 1-5        # 평일 오전 9시
0 0 1 * *          # 매월 1일
*/15 9-17 * * 1-5  # 업무시간 15분마다

추가 읽을거리


다음 cron 표현식을 구축할 준비가 되셨나요? **Cron 표현식 빌더**를 열고 처음부터 스케줄을 올바르게 설정하세요.

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one