免费在线 Crontab 和 Cron 表达式解释器
像 0 */5 * * * 这样的 Cron 表达式紧凑但神秘。 Dokall 将任何有效的 cron 表达式转换为人类可读的文本并显示即将到来的运行时间,以便您可以在部署之前验证计划。
DevOps 工程师和后端开发人员使用此工具来仔细检查计划的作业、调试计时问题并为团队记录 cron 配置。
什么是 Cron?
Cron 是类 Unix 操作系统中基于时间的任务调度器。它在预定时间自动运行命令或脚本——每分钟、每天午夜、每周一上午 9 点,或你能表达的任何其他计划。cron 守护进程在后台运行,每分钟检查一次计划。
每个用户都有一个 crontab(cron 表)文件,列出其计划任务。系统级 cron 任务位于 /etc/crontab 和 /etc/cron.d/。cron 系统是服务器管理的基础——它处理日志轮转、备份、数据库维护、邮件报告、缓存清理以及无数其他自动化任务。
Cron 表达式格式
标准 cron 表达式有五个以空格分隔的字段:分钟(0–59)、小时(0–23)、日(1–31)、月(1–12)和星期(0–7,其中 0 和 7 都表示星期日)。
每个字段可以是具体值(5)、范围(1–5)、列表(1,3,5)、步进(*/5),或星号(*)表示所有值。表达式 30 2 * * 1 表示「周一凌晨 2:30」。表达式 0 */4 * * * 表示「每第 4 个小时的第 0 分钟」(午夜、凌晨 4 点、上午 8 点、中午、下午 4 点、晚上 8 点)。
某些 cron 实现(如 Quartz)会增加第六个字段表示秒,以及第七个字段表示年。AWS CloudWatch Events 和 GitHub Actions 使用略有不同的语法。本工具解析标准的 5 字段 Unix cron 表达式。
Cron 表达式中的特殊字符
星号(*)表示「每一个」。小时字段中的 * 表示每小时。星期字段中的 * 表示每天。
逗号(,)分隔列表值。星期字段中的 1,3,5 表示周一、周三和周五。
连字符(-)定义范围。小时字段中的 9-17 表示从上午 9 点到下午 5 点的每个小时。
斜杠(/)定义步进。分钟字段中的 */5 表示每第 5 分钟(0、5、10、15…)。1-30/2 表示从 1 到 30 每隔 2 分钟(1、3、5、7…)。
某些实现支持额外字符:L(月末最后一天)、W(最近工作日)、#(月第 n 个星期几,例如 2#1 = 第一个周一),以及 ?(无特定值,在已指定另一个日期字段时使用)。
常用 Cron 计划
每分钟:* * * * * —— 适用于健康检查和实时监控,但需考虑负载。
每 5 分钟:*/5 * * * * —— 轮询、缓存更新和队列处理的常用间隔。
每小时:0 * * * * —— 在每小时的第 0 分钟运行。适合小时级报告和数据同步。
每天午夜:0 0 * * * —— 经典的每日任务,用于备份、日志轮转和报告。
每个工作日上午 9 点:0 9 * * 1-5 —— 周一至周五运行。常用于工作时间任务和每日通知。
每月第一天:0 0 1 * * —— 在 1 号午夜运行。适合月度计费、报告和清理。
每周日凌晨 2 点:0 2 * * 0 —— 每周维护窗口。选择流量较低的时间。
Cron 最佳实践
始终将输出重定向到日志文件:*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1。没有重定向时,cron 会通过邮件发送输出(或在未配置邮件时静默丢弃),你会丢失调试信息。
对命令和文件使用绝对路径。Cron 以最小环境运行——你的 PATH 可能不包含 /usr/local/bin 或交互式 shell 中使用的其他目录。指定完整路径,或在 crontab 顶部设置 PATH。
添加错误处理和锁定。如果任务运行时间长于间隔,下一次调用会在第一次仍在运行时启动。使用 flock 或 PID 文件防止重叠:* * * * * flock -n /tmp/myjob.lock /path/to/script.sh。
部署前测试计划。将 cron 表达式粘贴到本解释器中,确认下次运行时间符合预期。常见错误是混淆日字段和星期字段。
监控你的 cron 任务。使用 cron 监控服务(Cronitor、Healthchecks.io),在计划任务未运行或耗时过长时向你发出警报。