cron linux devops cheat-sheet scheduling automation

Cron 语法速查表:完整参考与定时任务可视化

Cron 表达式语法的详尽指南,包括特殊字符、常用示例以及可视化工具说明。掌握 Linux 和 Unix 的 crontab 定时任务调度。

Cron 语法速查表:完整参考指南

Cron 是类 Unix 操作系统中基于时间的作业调度器。无论您是设置后台任务的开发人员,还是管理服务器维护的 DevOps 工程师,理解 Cron 表达式语法 都是必不可少的。

本指南提供了 cron 字段、特殊字符和实际示例的完整分解,帮助您自信地调度任务。


1. Cron 表达式格式

标准 cron 表达式由五个字段组成(在某些系统(如 Quartz 或 Jenkins)中为六个)。

┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 每月几号 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期几 (0 - 6) (周日至周六)
│ │ │ │ │
* * * * *

2. 特殊字符参考

字符 说明 示例
* 任意值:匹配该字段的每一个可能的值。 * * * * * (每分钟)
, 值列表分隔符:指定一个值列表。 0,15,30,45 (每 15 分钟)
- 值范围:指定从 X 到 Y 的范围。 9-17 (从上午 9 点到下午 5 点)
/ 步进值:指定增量。 */15 (每 15 分钟)
L 最后 (Last):指定月份或星期的最后一天。 5L (本月最后一个周五)
W 工作日 (Weekday):指定最接近某日期的工作日 (周一至周五)。 15W (最接近 15 号的工作日)
# 每月第 N 天:指定星期几的第几次出现。 6#3 (每月第三个周六)

3. 常用 Cron 示例

频率 表达式 说明
每分钟 * * * * * 每分钟运行一次任务。
每小时 0 * * * * 每小时开始时运行。
每天午夜 0 0 * * * 每天 00:00 运行一次。
每周日凌晨 4 点 0 4 * * 0 非常适合每周备份。
每 15 分钟 */15 * * * * 在 :00, :15, :30, 和 :45 运行。
工作时间 (9-5) 0 9-17 * * 1-5 在工作日每小时运行一次。

4. crontab -e vs crontab -l

crontab 命令用于管理您的个人 cron 任务。

  • crontab -e: 打开您的个人 crontab 文件进行编辑。如果是第一次,可能会要求您选择编辑器(如 nano 或 vim)。
  • crontab -l: 列出当前用户的所有活动 cron 任务。
  • crontab -r: 移除您所有的当前 cron 任务。请谨慎使用!

5. 可视化您的任务计划

阅读原始 cron 表达式可能很困难。这就是我们构建 Cron 定时任务可视化工具 的原因。

我们的工具可以帮助您:

  1. 解析表达式:立即将 0 4 * * 0 翻译为“在周日的 04:00”。
  2. 下次运行时间:根据您的时区查看接下来的 5 次计划执行时间。
  3. 人类可读的描述:不再需要猜测 */5 9-17 * * 1-5 是什么意思。

FAQ:Cron 任务故障排除

问:为什么我的 cron 任务没有运行?

:最常见的原因是 环境变量。Cron 在极简的 shell 环境中运行。务必在命令中使用绝对路径(例如,使用 /usr/bin/python3 而不是 python3),并将输出记录到文件中:* * * * * /path/to/script.sh >> /var/log/cron.log 2>&1

问:systemd timer 替代方案是什么?

:现代 Linux 发行版(如 Ubuntu、Fedora)建议使用 systemd timers 代替 cron。它们通过 journalctl 提供更好的日志记录、依赖关系管理和更灵活的调度,尽管配置相对复杂。

问:如何处理 cron 中的时区问题?

:默认情况下,cron 在系统的本地时区运行(服务器上通常是 UTC)。某些系统允许您在 crontab 文件顶部设置 CRON_TZ=Asia/Shanghai,但最可靠的方法是将服务器时钟同步到所需的时区。


Tool3M 相关工具