| 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 * # 从一月开始每 3 个月(1月、4月、7月、10月)
当日和星期都被设置(非 *)时,行为取决于实现。在标准 cron 中,如果任一条件满足,任务就会执行——是 OR 关系,不是 AND。这让很多人措手不及。
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 触发器中使用相同的五字段语法。所有时间为 UTC。
on:
schedule:
- cron: '0 3 * * 1-5' # 工作日 UTC 凌晨 3 点
有关 YAML 配置的深入了解,请参阅 Kubernetes 的 YAML 和 Docker Compose 的 YAML。
如果任务耗时超过运行间隔,你将得到重叠的实例。在 */5 * * * * 调度上运行 8 分钟的脚本会堆积。
解决方案:
flock)concurrencyPolicy: Forbid0 0 31 * * # 仅在有 31 天的月份执行
这在 1 月、3 月、5 月、7 月、8 月、10 月和 12 月执行,但会静默跳过其他五个月。如果需要月末任务,考虑在 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 表达式是一个包含 5 或 6 个字段(分钟、小时、月中的天、月份、星期几,以及可选的秒)的字符串,用于在 Unix 系统中调度自动化任务。
星号(*)表示"每个"。例如,分钟字段中的 * 表示"每分钟",小时字段中的 * 表示"每小时",以此类推。
标准 Unix/Linux cron 使用 5 个字段(分钟 小时 日 月 星期)。许多现代调度器(如 AWS EventBridge、Kubernetes CronJobs)支持 6 个字段,在开头或结尾添加可选的秒字段。
使用:0 9 * * 1-5。这表示分钟=0,小时=9,任意月中日,任意月份,星期一(1)到星期五(5)。