Crontab表达式生成
便捷生成Linux的定时执行规则,模拟执行结果
调度语法精髓 Schedule Syntax
Crontab 通过五个占位符定义时间,理解其 通配符 是精准调度的前提。
五位参数定义
* * * * *
分 时 日 月 周
分 时 日 月 周
/ 表示间隔(*/5 每5分钟);, 表示列表(1,3,5 点执行);- 表示范围。
日与周的“或”关系
注意:如果同时定义了“日期”和“星期”,它们之间是 “或” (OR) 关系。即日期满足或星期满足,任务都会执行。
ENV Trap
极简的环境变量
Cron 默认只加载极少环境变量,不会读取 你的 .bashrc 或 .zshrc。这导致在终端能跑的脚本在 Cron 里会报 "Command not found"。
Solution / 方案:
使用绝对路径
脚本内置 PATH 声明
Concurrency / 并发控制
使用 flock 文件锁
如果上一个任务没跑完,下一个又开启,会导致资源耗尽。使用 flock -xn 确保同一时间只有一个实例运行。
日志重定向
Cron 默认会将标准输出发邮件给 root。应主动重定向到文件:>> /var/log/my.log 2>&1
百分号 (%) 的转义陷阱
在 Crontab 命令中,% 具有特殊含义(代表换行符)。如果你在命令里用 date +%Y%m%d,必须写成 \%Y\%m\%d,否则任务会因语法错误而失效。
#EscapeRequired
#RootCrontab
标准字段解析 Standard Field Logic
| 字段 (Field) | 必填 | 允许值 | 特殊字符 | 备注 |
|---|---|---|---|---|
| 分钟 (Minutes) | 是 | 0 – 59 | * , - / | */5 表示能被 5 整除的分钟 |
| 小时 (Hours) | 是 | 0 – 23 | * , - / | 0 点为午夜 |
| 日 (Day of Month) | 是 | 1 – 31 | * , - / L W | L 代表当月最后一天 |
| 月 (Month) | 是 | 1 – 12 / JAN-DEC | * , - / | 可以用缩写 |
| 周 (Day of Week) | 是 | 0 – 7 / SUN-SAT | * , - / L # | 0 和 7 均为周日 |
Advanced Characters
L (Last)
在“日”字段:该月最后一天。
在“周”字段:5L 表示该月最后一个周五。
W (Weekday)
寻找最接近的工作日。15W 即离 15 号最近的周一至周五(不跨月)。
# (Nth Day)
5#3 表示每月的第 三 个周五。
Quick Examples / 实战样例
0 0 L * *
每月最后一天 0点0 0 */3 * *
每隔三天 0点*/15 * * * *
每隔15分钟执行0 3 * * *
每天凌晨 3:0030 8 * * 7
每周日 8:300 0 * * 1,5
每周一与周五 0点*/15 18-23 * * *
晚18-23点每15分0 14 12 5 *
每年5月12日 14点