首页 / 教程文章 / Cron 表达式语法详解:分时日月周一篇掌握

Cron 表达式语法详解:分时日月周一篇掌握

发布于 2026-08-21 14:00:00 · 2 阅读 · 标签:Cron,定时任务,Linux,运维

Cron 用 5 个字段表示分/时/日/月/周,支持 * 、逗号、连字符、斜杠。讲清常用写法与易错的星期、日互斥问题。

一、五个字段

标准 Cron 表达式从左到右:

分 时 日 月 周

例:30 2 * * * = 每天凌晨 2:30;0 9 * * 1-5 = 工作日每天 9:00。

二、四种特殊符号

三、日与周的互斥陷阱

经典坑:日和周同时指定时,多数 Cron 实现「或」而不是「且」

0 0 1 * 1 不是「每月 1 号且是周一」,而是「每月 1 号 每个周一」执行!想让两者同时成立,在命令里自己判断(如 [ "$(date +\%d)" = "01" ] && ...)。

四、常用模板速查

查看日志确认执行:grep CRON /var/log/syslog,环境变量与 PATH 与交互 shell 不同,脚本里用绝对路径最稳。

在线体验

不用装任何环境,直接用本站时间戳转换工具在线操作,数据都在浏览器本地处理,方便又安全。

常见问题

Cron 里 % 为什么报错?

百分号在 crontab 中有特殊含义(换行/ stdin 结束),命令里使用必须转义成 \%。date 命令的格式串 +\%Y\%m\%d 是最常踩的坑。

为什么我的 cron 任务不执行?

按顺序查:crontab -l 确认已加载;脚本加执行权限并写绝对路径(cron 的 PATH 很精简);输出重定向到日志文件;看 /var/log/cron 或 syslog 的调度记录。

0 0 31 * * 是什么效果?

每月最后一天?不,是「每逢 31 号」——只有大月才有 31 号,小月自然跳过。想每月最后一天可用扩展语法 L(0 0 L * *,需 cron 实现支持)。

更多文章