速查表 · Cron 速查表 · Cron 每月最后一天执行 — Crontab 示例
Cron 每月最后一天执行 — Crontab 示例
59 23 L * *
在每月最后一天的 23:59 执行(28 号到 31 号,视当月天数而定)。
逐字段解释
| 字段 | 值 | 含义 |
|---|---|---|
分钟 | 59 | 第 59 分 |
小时 | 23 | 晚上 11 点 |
每月几号 | L | 当月最后一天 |
月份 | * | 每个月 |
星期几 | * | 星期几都行 |
cron 没有一个原生代表「最后一天」的数字,因为它在 28 到 31 之间变化。几号字段里的 L 正是为此而生 — 但它是扩展语法,由 Cronie(多数 Linux 发行版)、Quartz 和部分云调度器支持,经典 POSIX cron 并不认。
可移植的兜底办法是每晚都跑,由脚本自己判断明天是不是 1 号:
59 23 * * * [ "$(date -d tomorrow +\%d)" = "01" ] && /usr/local/bin/month-end.sh
相关调度
常见问题
我的 cron 拒绝接受 L,为什么?
你用的实现早于 L 扩展。查 man 5 crontab 里有没有提到 L 或 last;没有的话就用上面那个每日判断的兜底写法。
为什么 crontab 那行里 % 要写成两个?
在 crontab 中,裸的 % 会开始命令的 STDIN 段。凡是需要字面百分号(比如 date 的格式串)都得转义成 \%。
选 23:59 是有原因的吗?
有 — 它保证运行仍落在最后一天里。00:00 严格来说已经是下个月的 FIRST 天,任何会读日期的逻辑都会被「最后一天」这个语义打崩。
别死记语法 — 用可视化生成器
在 Cron 编辑器里试用这些排程完整速查表:Cron 速查表