DevToolBox免费
博客广告合作

Crontab 速查表 2025:50+ 个你一定会用到的 Cron 表达式实例

12 分钟阅读作者 DevToolBox

无论你是在调度备份、自动化部署还是运行定期清理脚本,cron 都是 Unix/Linux 系统上任务调度的核心。本速查表提供 50+ 个可直接复制粘贴的 cron 表达式示例,按频率分类,并包含 crontab 命令、平台差异和常见陷阱。

1. Cron 表达式语法

标准 cron 表达式由空格分隔的 5 个字段组成,每个字段控制任务何时运行:

┌───────────── 分钟 (0–59)
│ ┌─────────── 小时 (0–23)
│ │ ┌───────── 日 (1–31)
│ │ │ ┌─────── 月 (1–12 或 JAN–DEC)
│ │ │ │ ┌───── 星期 (0–7 或 SUN–SAT,0 和 7 = 周日)
│ │ │ │ │
* * * * *  command_to_execute

命令跟在五个字段之后。使用我们的 Cron 生成器工具可视化构建表达式。

2. 特殊字符说明

Cron 使用四个特殊字符来定义超出固定值的调度:

字符含义示例说明
*匹配该字段的每个可能值* * * * *Every minute
,指定值列表(如 1,3,5)0 9 * * 1,3,5Mon, Wed, Fri at 9 AM
-定义范围(如 1–5 表示 1 到 5)0 9 * * 1-5Mon through Fri at 9 AM
/定义步长间隔(如 */5 表示每 5 个单位)*/10 * * * *Every 10 minutes

3. 50+ 个 Cron 表达式示例

以下表格涵盖最常用的 cron 调度。每个表达式都可以直接复制粘贴到你的 crontab 中。

每 X 分钟

表达式说明下次运行示例
* * * * *Every minute10:00, 10:01, 10:02 ...
*/1 * * * *Every minute (explicit)10:00, 10:01, 10:02 ...
*/2 * * * *Every 2 minutes10:00, 10:02, 10:04 ...
*/5 * * * *Every 5 minutes10:00, 10:05, 10:10 ...
*/10 * * * *Every 10 minutes10:00, 10:10, 10:20 ...
*/15 * * * *Every 15 minutes10:00, 10:15, 10:30, 10:45
*/20 * * * *Every 20 minutes10:00, 10:20, 10:40 ...
*/30 * * * *Every 30 minutes10:00, 10:30, 11:00 ...
0,15,30,45 * * * *At 0, 15, 30, 45 minutes past each hour10:00, 10:15, 10:30, 10:45

每小时调度

表达式说明下次运行示例
0 * * * *Every hour (at minute 0)10:00, 11:00, 12:00 ...
30 * * * *Every hour at minute 3010:30, 11:30, 12:30 ...
15 * * * *Every hour at minute 1510:15, 11:15, 12:15 ...
0 */2 * * *Every 2 hours00:00, 02:00, 04:00 ...
0 */3 * * *Every 3 hours00:00, 03:00, 06:00 ...
0 */4 * * *Every 4 hours00:00, 04:00, 08:00 ...
0 */6 * * *Every 6 hours00:00, 06:00, 12:00, 18:00
0 */8 * * *Every 8 hours00:00, 08:00, 16:00
0 */12 * * *Every 12 hours00:00, 12:00

每天调度

表达式说明下次运行示例
0 0 * * *Daily at midnight (00:00)Tomorrow 00:00
0 1 * * *Daily at 1:00 AMTomorrow 01:00
0 6 * * *Daily at 6:00 AMTomorrow 06:00
30 7 * * *Daily at 7:30 AMTomorrow 07:30
0 9 * * *Daily at 9:00 AMTomorrow 09:00
30 8 * * *Daily at 8:30 AMTomorrow 08:30
0 12 * * *Daily at noon (12:00)Tomorrow 12:00
0 15 * * *Daily at 3:00 PMTomorrow 15:00
0 18 * * *Daily at 6:00 PMTomorrow 18:00
0 23 * * *Daily at 11:00 PMTomorrow 23:00
0 8-17 * * *Every hour from 8 AM to 5 PM08:00, 09:00 ... 17:00
0 9,12,18 * * *Three times a day (9 AM, noon, 6 PM)09:00, 12:00, 18:00

每周调度

表达式说明下次运行示例
0 9 * * 1Every Monday at 9:00 AMNext Monday 09:00
0 9 * * 1-5Weekdays (Mon-Fri) at 9:00 AMNext weekday 09:00
0 0 * * 0Every Sunday at midnightNext Sunday 00:00
0 0 * * 6,0Saturday & Sunday at midnightNext Sat/Sun 00:00
0 17 * * 5Every Friday at 5:00 PMNext Friday 17:00
0 9 * * 1,3,5Mon, Wed, Fri at 9:00 AMNext Mon/Wed/Fri 09:00
0 8-17 * * 1-5Hourly 8AM–5PM, weekdays onlyNext weekday 08:00
30 6 * * 1-5Weekdays at 6:30 AMNext weekday 06:30

每月调度

表达式说明下次运行示例
0 0 1 * *1st of every month at midnightNext month, 1st 00:00
0 0 15 * *15th of every month at midnightNext 15th 00:00
0 9 1 * *1st of every month at 9:00 AMNext month, 1st 09:00
0 0 1,15 * *1st and 15th at midnightNext 1st or 15th 00:00
0 0 * * 5LLast Friday of the month (non-std)Last Fri 00:00
0 9 * * 1#1First Monday of the month (non-std)First Mon 09:00
0 0 28 * *28th of every month at midnightNext 28th 00:00

每年/每季度调度

表达式说明下次运行示例
0 0 1 1 *January 1st at midnightJan 1 00:00
0 0 1 1,4,7,10 *Quarterly: Jan, Apr, Jul, Oct 1stNext quarter 00:00
0 0 1 1,7 *Bi-annually: Jan 1 & Jul 1Jan 1 or Jul 1 00:00
0 0 25 12 *December 25th at midnightDec 25 00:00
0 0 1 */3 *Every 3 months on the 1stNext 1st in 3 months
0 0 1 */6 *Every 6 months on the 1stNext 1st in 6 months

业务与 DevOps 调度

表达式说明下次运行示例
0 2 * * *Database backup at 2:00 AM dailyTomorrow 02:00
0 3 * * 0Log rotation every Sunday at 3 AMNext Sunday 03:00
0 4 1 * *Monthly DB cleanup on 1st at 4 AMNext month, 1st 04:00
0 1 * * *SSL cert check daily at 1 AMTomorrow 01:00
*/5 * * * *Health check every 5 minutes10:00, 10:05, 10:10 ...
0 5 * * 1-5Deploy window: weekdays at 5 AMNext weekday 05:00
0 0 * * *Rotate logs daily at midnightTomorrow 00:00
0 */4 * * *Send report digest every 4 hours00:00, 04:00, 08:00 ...
0 22 * * 5Friday night maintenance at 10 PMNext Friday 22:00
30 2 * * *Temp file cleanup at 2:30 AM dailyTomorrow 02:30

4. Crontab 命令速查

crontab 命令用于管理用户级 cron 任务文件。以下是核心命令:

命令作用
crontab -eEdit your crontab file (opens in default editor)
crontab -lList all cron jobs for the current user
crontab -rRemove all cron jobs for the current user (use with caution!)
crontab -u alice -lList cron jobs for a specific user (requires root)
crontab -u alice -eEdit crontab for a specific user (requires root)
crontab filenameInstall a crontab from a file (overwrites existing)
# Edit crontab
crontab -e

# List all cron jobs
crontab -l

# Backup current crontab to a file
crontab -l > my-crontab-backup.txt

# Install crontab from a file
crontab my-crontab-backup.txt

# Remove all cron jobs (careful!)
crontab -r

5. 各平台 Cron 语法差异

Cron 语法在不同平台略有差异,以下是你需要了解的关键区别:

Linux crontab(标准)

5 个字段:分钟 小时 日 月 星期。最原始和最常见的格式。

# Standard 5-field crontab
*/5 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
GitHub Actions

schedule.cron 中使用标准 5 字段。始终以 UTC 运行。最小间隔:5 分钟。

# .github/workflows/scheduled.yml
on:
  schedule:
    - cron: '0 9 * * 1-5'  # Weekdays 9AM UTC
AWS CloudWatch / EventBridge

6 个字段(增加年份)。使用 ? 替代日或星期。包裹在 cron() 中。

# AWS EventBridge (6 fields, note the ?)
cron(0 9 ? * MON-FRI *)  # Weekdays 9AM UTC
Kubernetes CronJob

schedule 规范中使用标准 5 字段。K8s 1.27+ 通过 timeZone 支持时区。

# Kubernetes CronJob spec
apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-backup
spec:
  schedule: "0 2 * * *"
  timeZone: "America/New_York"  # K8s 1.27+
Vercel Cron

vercel.json 中使用标准 5 字段。以 UTC 运行。免费计划:最多 2 个 cron 任务,每天最少 1 次。

// vercel.json
{
  "crons": [{
    "path": "/api/cron/daily-report",
    "schedule": "0 9 * * *"
  }]
}

6. Cron 表达式常见陷阱

以下是开发者在使用 cron 调度时最常犯的错误:

1
时区混淆

Cron 默认在系统时区运行。CI/CD 平台(GitHub Actions、Vercel)使用 UTC。务必确认你的 cron 守护进程使用哪个时区。

2
执行重叠

如果任务耗时超过间隔(如 5 分钟调度中的 10 分钟任务),会产生重叠运行。使用 flock 或 PID 锁文件防止此问题。

3
夏令时

当时钟向前拨时,在跳过的小时调度的任务将不会运行。当时钟向后拨时,任务可能运行两次。使用 UTC 可避免此问题。

4
同时指定日和星期

在标准 cron 中,如果日和星期都被设置(非 *),任务在任一匹配时运行 — 不是两者都满足。这是常见的混淆来源。

5
不支持秒

标准 cron 不支持秒级调度。最小分辨率是 1 分钟。要实现亚分钟调度,可在 cron 任务中使用带 sleep 的循环。

6
环境变量

Cron 任务以最小环境运行。你的 $PATH 可能不包含预期的程序。在 cron 命令中始终使用完整路径。

# Gotcha: overlapping runs - use flock to prevent
*/5 * * * * /usr/bin/flock -n /tmp/myjob.lock /path/to/script.sh

# Gotcha: environment - always use full paths
0 2 * * * /usr/bin/python3 /home/user/scripts/backup.py >> /var/log/backup.log 2>&1

# Gotcha: 30-second workaround (two entries)
* * * * * /path/to/script.sh
* * * * * sleep 30 && /path/to/script.sh

# Gotcha: PATH not set - define it at the top of your crontab
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Gotcha: percent signs (%) must be escaped in crontab
# Wrong:
0 0 * * * echo "Today is $(date +%Y-%m-%d)"
# Correct:
0 0 * * * echo "Today is $(date +\%Y-\%m-\%d)"

Sample Crontab File

Here is a complete, real-world crontab file combining several patterns discussed above:

# =============================================
# Crontab for: webserver (production)
# Last updated: 2025-01-15
# =============================================

# Environment
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO="ops-team@example.com"

# --- BACKUPS ---
# Full database backup at 2:00 AM daily
0 2 * * * /usr/bin/flock -n /tmp/db-backup.lock /opt/scripts/db-backup.sh >> /var/log/db-backup.log 2>&1

# Incremental file backup every 6 hours
0 */6 * * * /opt/scripts/file-backup.sh >> /var/log/file-backup.log 2>&1

# --- MAINTENANCE ---
# Clear temp files older than 7 days, daily at 3 AM
0 3 * * * /usr/bin/find /tmp -type f -mtime +7 -delete

# Rotate application logs every Sunday at 4 AM
0 4 * * 0 /opt/scripts/rotate-logs.sh >> /var/log/log-rotation.log 2>&1

# --- MONITORING ---
# Health check every 5 minutes
*/5 * * * * /opt/scripts/healthcheck.sh > /dev/null 2>&1

# SSL certificate expiry check daily at 6 AM
0 6 * * * /opt/scripts/check-ssl.sh

# Disk space alert if usage > 90%, every hour
0 * * * * /opt/scripts/disk-alert.sh

# --- REPORTS ---
# Send daily summary at 8 AM on weekdays
0 8 * * 1-5 /opt/scripts/daily-report.sh

# Monthly analytics report on the 1st at 9 AM
0 9 1 * * /opt/scripts/monthly-report.sh

7. 测试与调试 Cron

在将 cron 任务部署到生产环境之前,验证它是否按预期工作:

1
使用 Cron 表达式解析器

将你的表达式粘贴到我们的 Cron 表达式解析器中,查看接下来 10 次运行时间和人类可读的解释。

2
检查 Cron 日志

在大多数 Linux 系统上,cron 日志在 /var/log/syslog/var/log/cron 中。使用 grep CRON /var/log/syslog 过滤。

3
重定向输出

将 stdout 和 stderr 捕获到日志文件中以便调试。这可以防止 cron 为每次执行发送邮件。

4
使用更短的间隔测试

在提交月度调度之前,先用 * * * * *(每分钟)测试以确保脚本正确运行,然后再更改为目标调度。

5
验证邮件配置

默认情况下,cron 将输出通过邮件发送给用户。在 crontab 顶部设置 MAILTO="" 来禁用邮件,或设置为真实地址接收告警。

# Redirect all output to a log file
0 2 * * * /path/to/backup.sh >> /var/log/cron-backup.log 2>&1

# Disable cron mail for this job
0 2 * * * /path/to/backup.sh > /dev/null 2>&1

# Set MAILTO at the top of crontab
MAILTO=""
# Or send to a real address
MAILTO="admin@example.com"

# Check cron logs on Debian/Ubuntu
grep CRON /var/log/syslog | tail -20

# Check cron logs on CentOS/RHEL
grep CRON /var/log/cron | tail -20

# On systems using journald (systemd)
journalctl -u cron --since "1 hour ago"

# Quick test: add a job that writes to a file
# Then check if the file gets updated
* * * * * echo "cron works: $(date)" >> /tmp/cron-test.log

# Verify your crontab was saved correctly
crontab -l | grep -v '^#'

# Check if cron daemon is running
systemctl status cron    # Debian/Ubuntu
systemctl status crond   # CentOS/RHEL

Common Cron Debugging Checklist

CheckHow to Verify
Cron daemon running?systemctl status cron (or crond)
Crontab saved?crontab -l and look for your entry
Script executable?chmod +x /path/to/script.sh
Full paths used?Use which python3 to find full path
Output captured?Add >> /tmp/debug.log 2>&1
Permissions correct?Script owner = crontab owner
No syntax errors?bash -n /path/to/script.sh
Timezone correct?timedatectl or date to check

8. 常见问题

Cron 表达式的格式是什么?

标准 cron 表达式有 5 个空格分隔的字段:分钟 (0-59)、小时 (0-23)、日 (1-31)、月 (1-12) 和星期 (0-7)。例如 "0 9 * * 1-5" 表示每个工作日上午 9:00。

*/5 在 cron 中是什么意思?

*/5 语法表示该字段"每 5 个单位"。在分钟字段中,*/5 * * * * 每 5 分钟运行一次(在 0、5、10、15...55 分钟时)。在小时字段中,0 */5 * * * 每 5 小时在第 0 分钟运行。

如何每 30 秒运行一次 cron 任务?

标准 cron 不支持亚分钟间隔。解决方法是创建两个 cron 条目:一个在整分钟运行,另一个加 30 秒延迟:* * * * * /path/to/script.sh 和 * * * * * sleep 30 && /path/to/script.sh

cron 和 crontab 有什么区别?

Cron 是执行定时任务的后台守护进程(服务)。Crontab(cron 表)是列出定时任务及其时间安排的文件。你使用 "crontab" 命令来编辑、列出或删除个人的 cron 表。

可以在 Windows 上使用 cron 吗?

原生 Windows 没有 cron。等效工具是任务计划程序 (schtasks.exe)。但如果你使用 WSL(Windows Linux 子系统),可以正常使用 cron。Windows 上的 Docker 容器也支持 cron。

这篇文章有帮助吗?

保持更新

获取每周开发技巧和新工具通知。

无垃圾邮件,随时退订。

合作推荐

赞助这篇文章

把你的产品放到这个开发者主题旁边,并追踪点击效果。

咨询文章赞助

本站使用 Cookie 进行流量分析与广告展示。继续浏览即视为同意。 隐私政策