工具库

Crontab表达式生成

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

每隔 分钟执行一次

Standard Crontab (5-bit)

Next 10 Execution Times

调度语法精髓 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 WL 代表当月最后一天
月 (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:00
30 8 * * 7 每周日 8:30
0 0 * * 1,5 每周一与周五 0点
*/15 18-23 * * * 晚18-23点每15分
0 14 12 5 * 每年5月12日 14点

全部评论