先理解结构
一条 cron 表达式是 5 个字段,用空格分隔:
┌─ 分钟 (0-59)
│ ┌─ 小时 (0-23)
│ │ ┌─ 日 (1-31)
│ │ │ ┌─ 月 (1-12)
│ │ │ │ ┌─ 星期 (0-6, 0=周日)
│ │ │ │ │
* * * * *
写 cron 的核心思路:哪个字段要限制,就填具体值;不限制就填 *。
四个关键符号
*—— 每一个。放在某字段表示”该维度不限制”。,—— 枚举。如小时位9,12,18。-—— 区间。如星期位1-5(周一到周五)。/—— 步长。如分钟位*/15(每 15 分钟)。
一步步构造
目标 1:每 5 分钟执行一次。 只需限制分钟维度为”每 5 分钟”,其余不限:
*/5 * * * *
目标 2:每天凌晨 3 点执行。 限制分钟=0、小时=3,其余不限:
0 3 * * *
目标 3:每周一上午 9 点执行。 分钟=0、小时=9、星期=1:
0 9 * * 1
目标 4:工作日每小时整点执行。 分钟=0、星期=1-5:
0 * * * 1-5
规律:从左到右,把要固定的维度填上具体值,其余留 *。需要”每隔 N”就用 /,需要”多个具体值”就用 ,,需要”一段范围”就用 -。
装进 crontab
写好表达式后,配上要执行的命令,放进 crontab:
# crontab -e 后加入一行:
0 3 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1
- 前半段是”什么时候”(表达式),后半段是”执行什么”(命令)。
- 命令建议用绝对路径,并把输出重定向到日志便于排查。
- 保存退出后,用
crontab -l确认已添加。
在 Cron 表达式生成器 里填好命令,可以直接得到这一整行 crontab,复制即用;它还给出 Windows 任务计划程序、Node.js、Python、Spring 等环境的对应写法。
验证你的表达式
新手最容易写错的是”以为每天却变成每分钟”。写完务必验证:
- 打开 Cron 表达式生成器;
- 粘贴你的表达式;
- 看中文解释和未来 5 次执行时间是否符合预期。
继续学习
- 不清楚字段和符号含义?看 Cron 是什么。
- 想直接抄常见写法?看 Cron 表达式示例大全。
- 写好了却不执行?看 crontab 不执行怎么办。