| Expression | Description | Category |
|---|---|---|
* * * * * | Every minute | Frequent |
*/2 * * * * | Every 2 minutes | Frequent |
*/5 * * * * | Every 5 minutes | Frequent |
*/10 * * * * | Every 10 minutes | Frequent |
*/15 * * * * | Every 15 minutes | Frequent |
*/30 * * * * | Every 30 minutes | Frequent |
0 * * * * | Every hour (at :00) | Hourly |
30 * * * * | Every hour at :30 | Hourly |
0 */2 * * * | Every 2 hours | Hourly |
0 */4 * * * | Every 4 hours | Hourly |
0 */6 * * * | Every 6 hours | Hourly |
0 */12 * * * | Every 12 hours | Hourly |
0 0 * * * | Every day at midnight | Daily |
0 1 * * * | Every day at 1:00 AM | Daily |
0 6 * * * | Every day at 6:00 AM | Daily |
0 9 * * * | Every day at 9:00 AM | Daily |
0 12 * * * | Every day at noon | Daily |
0 18 * * * | Every day at 6:00 PM | Daily |
0 23 * * * | Every day at 11:00 PM | Daily |
0 0,12 * * * | Twice daily — midnight and noon | Daily |
0 9 * * 1 | Every Monday at 9:00 AM | Weekly |
0 9 * * 1-5 | Every weekday (Mon–Fri) at 9:00 AM | Weekly |
0 9 * * MON-FRI | Every weekday at 9 AM (named) | Weekly |
0 0 * * 0 | Every Sunday at midnight | Weekly |
0 0 * * 6,0 | Every Saturday and Sunday at midnight | Weekly |
0 8 * * 1,3,5 | Mon/Wed/Fri at 8:00 AM | Weekly |
0 0 1 * * | 1st of every month at midnight | Monthly |
0 0 15 * * | 15th of every month at midnight | Monthly |
0 0 1,15 * * | 1st and 15th of every month | Monthly |
0 0 L * * | Last day of every month (Quartz/AWS) | Monthly |
0 0 1 */3 * | Every 3 months on the 1st at midnight | Monthly |
0 0 1 1 * | January 1st at midnight (New Year) | Yearly |
0 0 1 1,7 * | January 1st and July 1st at midnight | Yearly |
0 9 * * 1#1 | First Monday of every month at 9 AM (Quartz) | Advanced |
0 0 * * 5L | Last Friday of every month (Quartz) | Advanced |
0/30 9-17 * * MON-FRI | Every 30 min 9 AM–5 PM on weekdays | Advanced |
5 4 * * sun | 5 min past 4 AM every Sunday | Advanced |
┌─────────── minute (0–59) │ ┌────────── hour (0–23) │ │ ┌───────── day of month (1–31) │ │ │ ┌──────── month (1–12 or JAN–DEC) │ │ │ │ ┌───────── day of week (0–6, Sun=0 or SUN–SAT) │ │ │ │ │ * * * * * command to execute
| Character | Name | Meaning | Example |
|---|---|---|---|
| * | Wildcard | Any value | * in hour = every hour |
| , | List separator | Multiple values | 1,15 in day = 1st and 15th |
| - | Range | From–to inclusive | 1-5 in weekday = Mon–Fri |
| / | Step | Every N units | */5 in minute = every 5 min |
| ? | No specific value | Ignore field (Quartz/AWS) | ? in day when weekday set |
| L | Last | Last day/weekday | L in day = last day of month |
| W | Weekday | Nearest weekday | 15W = nearest weekday to 15th |
| # | Nth weekday | N-th day in month | 2#1 = 1st Monday |
| Platform | Format | Example |
|---|---|---|
| Linux/macOS crontab | min hr dom mon dow | 0 9 * * 1-5 |
| GitHub Actions | min hr dom mon dow | 0 9 * * 1-5 |
| AWS EventBridge | min hr dom mon dow year | 0 9 ? * MON-FRI * |
| Quartz (Java) | sec min hr dom mon dow [year] | 0 0 9 ? * MON-FRI |
| Kubernetes CronJob | min hr dom mon dow | 0 9 * * 1-5 |
필드는 혼합 구문을 허용합니다. 평일 오전 8시와 오후 6시에 작업을 실행하려면:
0 8,18 * * 1-5
단계로 특정 월을 지정하려면:
0 0 1 1-12/3 * # 1월부터 3개월마다 (1월, 4월, 7월, 10월)
일과 요일이 모두 설정된 경우(*가 아닌 경우), 동작은 구현에 따라 다릅니다. 표준 cron에서는 어느 하나의 조건이 충족되면 작업이 실행됩니다 — AND가 아닌 OR 관계입니다. 이것은 많은 사람을 놀라게 합니다.
0 0 15 * 1
엄밀히 cron 표현식은 아니지만, @reboot는 널리 지원되는 단축어입니다:
@reboot /usr/local/bin/start-service.sh
기타 일반적인 단축어:
| 단축어 | 동등한 표현식 |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
전통적인 방식입니다. 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는 schedule 트리거 내에서 동일한 5필드 구문을 사용합니다. 모든 시간은 UTC입니다.
on:
schedule:
- cron: '0 3 * * 1-5' # 평일 UTC 오전 3시
YAML 설정에 대한 자세한 내용은 Kubernetes를 위한 YAML과 Docker Compose를 위한 YAML을 참조하세요.
작업이 실행 간격보다 오래 걸리면 겹치는 인스턴스가 발생합니다. */5 * * * * 스케줄에서 8분이 걸리는 스크립트는 쌓이게 됩니다.
해결책:
flock)concurrencyPolicy: Forbid 설정0 0 31 * * # 31일이 있는 달에만 실행
이것은 1월, 3월, 5월, 7월, 8월, 10월, 12월에 실행되지만 나머지 5개월은 조용히 건너뜁니다. 월말 작업이 필요하다면 1일에 실행하고 스크립트 로직을 조정하거나, "월의 마지막 날" 의미론을 지원하는 도구를 사용하는 것을 고려하세요.
일부 cron 구현에서는 crontab 파일 끝에 줄바꿈이 필요합니다. 마지막 항목이 실행되지 않으면 끝에 빈 줄을 추가하세요.
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
cron 표현식은 Unix 계열 시스템에서 자동화된 작업을 예약하기 위한 5개 또는 6개 필드(분, 시, 일, 월, 요일, 선택적으로 초)로 구성된 문자열입니다.
별표(*)는 '모든'을 의미합니다. 예를 들어, 분 필드의 *는 '매분', 시 필드의 *는 '매시간'을 의미하며, 각 필드 유형에 대해 동일합니다.
표준 Unix/Linux cron은 5개 필드(분 시 일 월 요일)를 사용합니다. AWS EventBridge, Kubernetes CronJobs 등 많은 최신 스케줄러는 시작 또는 끝에 선택적 초 필드를 추가한 6개 필드를 지원합니다.
사용: 0 9 * * 1-5. 분=0, 시=9, 임의의 날짜, 임의의 월, 요일=월요일(1)부터 금요일(5)을 의미합니다.