
什么是 Cron 任务?
Cron 任务是一种在 Unix-like 操作系统上按指定时间间隔自动运行的定时任务。其名称源自希腊语“chronos”(时间)。Cron 是系统服务;crontab(cron table)是定义定时任务的文件。
Cron 用于:自动备份、数据库维护、发送定时邮件、生成报告、清理临时文件、更新缓存,以及任何无需人工干预的重复性任务。

Crontab 语法
一个 crontab 条目包含六个字段:
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── 星期几 (0-7,其中 0 和 7 表示星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
特殊字符
| 字符 | 含义 | 示例 |
|---|---|---|
* |
任意值(通配符) | * * * * * 每分钟执行一次 |
, |
值列表 | 1,15,30 表示在第 1、15、30 分钟 |
- |
范围 | 9-17 表示上午 9 点到下午 5 点 |
/ |
步长 | */15 表示每 15 个单位 |

常见 Cron 调度示例
# 每分钟执行一次
* * * * * /path/to/script.sh
# 每小时的第 0 分钟执行
0 * * * * /path/to/script.sh
# 每天午夜执行
0 0 * * * /path/to/script.sh
# 每天凌晨 2:30 执行
30 2 * * * /path/to/script.sh
# 每周一上午 9 点执行
0 9 * * 1 /path/to/script.sh
# 每个工作日(周一至周五)下午 6 点执行
0 18 * * 1-5 /path/to/script.sh
# 每 15 分钟执行一次
*/15 * * * * /path/to/script.sh
# 每月第一天午夜执行
0 0 1 * * /path/to/script.sh
# 每周日凌晨 3 点执行(用于每周维护)
0 3 * * 0 /path/to/backup.sh
# 每天上午 8 点和晚上 8 点执行两次
0 8,20 * * * /path/to/script.sh
特殊预定义调度
大多数 cron 实现支持简写关键字:
| 关键字 | 等价表达式 | 描述 |
|---|---|---|
@reboot |
(无) | 启动时执行一次 |
@yearly |
0 0 1 1 * |
每年一次(1 月 1 日午夜) |
@annually |
0 0 1 1 * |
同 @yearly |
@monthly |
0 0 1 * * |
每月一次(1 日午夜) |
@weekly |
0 0 * * 0 |
每周一次(周日午夜) |
@daily |
0 0 * * * |
每天一次(午夜) |
@midnight |
0 0 * * * |
同 @daily |
@hourly |
0 * * * * |
每小时一次 |

管理 Crontab
# 查看当前用户的 crontab
crontab -l
# 编辑 crontab(使用默认编辑器)
crontab -e
# 删除当前用户的所有 cron 任务
crontab -r
# 编辑其他用户的 crontab(需要 root 权限)
sudo crontab -u username -e
# 列出其他用户的 crontab
sudo crontab -u username -l
Cron 环境与常见陷阱
Cron 任务在最小环境中运行——你在 shell 中依赖的 PATH、HOME 和其他变量可能不可用。
PATH 问题:指定可执行文件的完整路径:
# 错误——可能找不到 'python'
0 2 * * * python /opt/scripts/backup.py
# 正确——使用完整路径
0 2 * * * /usr/bin/python3 /opt/scripts/backup.py
输出重定向:默认情况下,cron 将输出通过邮件发送给系统用户。将输出重定向到日志文件:
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
时区:Cron 使用系统时区。如果你的服务器使用 UTC,但希望任务在“本地”时间运行,请考虑时区偏移。
错过任务:如果服务器在任务应该运行时宕机,该任务会被跳过——服务器重启后不会补执行(除非使用 anacron)。
使用此工具
用通俗英语输入你想要的调度,或填写时间字段,工具将生成正确的 crontab 表达式。你也可以粘贴 crontab 表达式以查看人类可读的描述。
-> 试试 Crontab 生成器