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 生成器工具可视化构建表达式。

Cron Generator Tool →

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
Cron Expression Parser Tool →

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
Crontab Generator Tool →

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

交互式构建和测试你的 cron 表达式:

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。

𝕏 Twitterin LinkedIn
这篇文章有帮助吗?

保持更新

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

无垃圾邮件,随时退订。

试试这些相关工具

Cron Expression GeneratorCron Expression Parser⏲️Crontab Generator🔍Cron Expression Parser

相关文章

Cron表达式生成器与解析器:语法、示例和代码指南

免费Cron表达式生成器和解析器。学习Cron语法,使用Node.js、Python、Bash、GitHub Actions和Kubernetes调度任务。

Docker Compose YAML 验证:10 个常见语法错误及修复方法

别再浪费时间在 Docker Compose YAML 错误上。学会识别和修复 10 个最常见的语法错误。