工具库

Cron表达式生成

便捷生成Cron定时执行规则,模拟Cron的执行结果

周期从 -
从第 秒开始,每 秒执行一次
周期从 -

Cron Expression Result

Next 10 Execution Times

参数位数详解 Standard vs Extended

选择错误的位数会导致任务无法启动或触发语法报错。

5位
Linux Crontab
分 时 日 月 周

这是 Linux 系统(如 Ubuntu/CentOS)自带的 Cron 格式。最小精度是 分钟。不支持秒级触发。

6位
Quartz / Spring
秒 分 时 日 月 周

常用于 Java 应用(Spring Task)。第一位是 。适合需要精确到秒的业务场景。

7位
Full Format
秒 分 时 日 月 周 年

Quartz 的完整格式。最后一位是 年份。可以指定任务在 2026 年特定的某天执行。

Question Mark (?)

日与周的互斥

在 6 位或 7 位 Cron 中,“日”“周” 不能同时指定值。如果你指定了其中一个,另一个必须用 ?

注:Linux 标准 5 位 Cron 不支持 ?,只能用 *。

Deployment Checklist / 避坑清单

路径必须是“绝对”的

Cron 运行时的当前目录是不确定的。脚本内的文件路径、可执行文件(如 /usr/local/bin/python3)请务必写全。

环境变量缺失

Cron 不会加载你的 .zshrc 或 .bash_profile。如果需要 Java 环境,请在脚本开头 export JAVA_HOME

百分比符号 (%) 逃逸与日志

在 Linux Crontab 中,% 意味着换行。如果你在执行 date +%Y,必须转义为 \%Y。 此外,务必通过 >> /tmp/cron.log 2>&1 捕获错误,否则任务静默失败时你将无从排查。

#LoggingStrategy #EscapeCharacters
多平台字段对照 Platform Comparison
字段分/时/日/月周 (Day of Week)
Linux Cron❌ 不支持1-12 / 1-310-7 (0/7=周日)❌ 不支持
Spring Cron0-59 (第1位)支持 ? 互斥0-7 (0/7=周日)❌ 不支持
Quartz (Java)0-59 (第1位)支持 L, W, ?1-7 (1=周日)1970-2099 (选填)
非标准字符 (Quartz/Spring)
?

问号 (Question Mark): 用于解除“日”与“周”的冲突。在 Java 实现中,这两个字段必须有一个为 ?,表示不指定。

L

最后 (Last): L 在日字段指月底;在周字段(如 5L)指本月最后一个周五。

#

第 N 个 (N-th): 仅周字段有效。5#3 表示每个月的第 3 个周五。

月末执行方案 (Java)

Quartz 方式 (原生支持 L)

@Scheduled(cron = "0 0 18 L * ?")

Spring 方式 (逻辑判定)

@Scheduled(cron = "0 0 18 28-31 * ?")
// 方法内判断: if (today == lastDayOfMonth) ...
Crontab Cheat Sheet / 常用实例
0 0 L * * * 每月最后一天 0点 (Quartz)
0 0 */3 * * 每隔 3 天 0点执行
*/15 * * * * 每隔 15 分钟执行一次
0 3 * * * 每天凌晨 3:00 执行
30 8 * * 7 每周日 8点30分执行
0 0 * * 1,5 每周一及周五 0点整执行
0 14 12 5 * 每年 5月12日 14点执行
*/15 18-23 * * * 晚18-23点每15分钟

全部评论