cron 如何在指定的日期和时间运行任务?

cron 指定日期时间的写法:五字段分别对应分/时/日/月/星期;一次性任务用 at 更合适;附 30 个常用表达式速查、字段语法表与 FAQ。

最佳实践
cron 如何在指定的日期和时间运行任务?封面

crontab 五个时间字段依次是"分 时 日 月 星期",把对应字段填成具体数字就是在指定日期时间运行。 例如 3 月 15 日上午 9:30 执行:

30 9 15 3 * /path/to/command

字段语法总览

┌─────────── 分钟 (0-59)
│ ┌───────── 小时 (0-23)
│ │ ┌─────── 日 (1-31)
│ │ │ ┌───── 月 (1-12,或 jan-dec)
│ │ │ │ ┌─── 星期 (0-6 或 sun-sat,0/7=周日)
│ │ │ │ │
* * * * *  命令

每个字段支持四种写法:

写法 含义 示例
* 任意值 每分钟/每天……
数字 具体值 30 = 第 30 分
a-b 范围 9-17 = 9 到 17 点
a,b,c 枚举 1,15 = 1 号和 15 号
*/n 步长 */10 = 每隔 10

常用示例速查

30 9 15 3 *    # 每年 3 月 15 日 9:30
0 22 * * 1-5   # 工作日 22:00
0 0 1 * *      # 每月 1 号零点
15 14 1 * *    # 每月 1 号 14:15
0 8 * * 1,3,5  # 每周一三五早 8 点

编辑入口

crontab -e        # 编辑当前用户的 crontab
crontab -l        # 查看现有任务

系统级任务编辑 /etc/crontab(格式多一列用户名)。

一次性任务请用 at

cron 是为"周期性"设计的。 只跑一次的任务("明天下午 3 点发版")用 at 更贴切:

echo '/opt/deploy/release.sh' | at 15:00 tomorrow
at -l            # 查看队列

用 cron 干一次性活儿的隐患:任务执行后忘了删规则,明年同一天它又跑了。

观测云对照

任务排期越精确,漏跑的代价往往越大(发版、对账、报表)。把任务输出统一采集到观测云,给关键任务配"预期窗口无日志即告警"的监控器——无论是 cron 没触发、时区搞错还是脚本报错,都能第一时间感知,而不是等业务方来问。

常见问题(FAQ)

Q:日期和星期同时填了会怎样?
A:这是经典坑——两者是"或"的关系!0 0 13 * 5 表示"13 号周五"都执行,不是"13 号恰逢周五"。

Q:能指定到秒吗?
A:不能,cron 最小粒度是分钟。秒级需求用 systemd timer 或脚本内 sleep 循环。

Q:cron 用的是哪个时区?
A:系统本地时区。部分实现支持在 crontab 里写 CRON_TZ=Asia/Shanghai 覆盖,容器环境尤其建议显式指定。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台