Cron 表达式生成
点几下选好频率,自动拼出 5 段 Cron 表达式,并告诉你它到底在什么时候跑。
每天固定时间执行
生成的表达式
0 8 * * *
五段分别是什么
Cron 的 5 段依次是「分 时 日 月 周」,用空格隔开,星号表示「每一个」。0 8 * * 1-5 读作:第 0 分钟、第 8 小时、任意日期、任意月份、周一到周五,合起来就是工作日早上 8 点整。位置错一位意思就全变了——8 * * * * 是每小时的第 8 分钟,* 8 * * * 是 8 点这一小时里每分钟都跑。
每段还支持几种写法:* 任意值,5 单个值,1-5 范围,1,3,5 列举,*/5 从最小值起每 5 个单位一次,10-30/5 在范围内每 5 个一次。月份和星期还能写英文缩写,比如 jan、mon,本工具输出的都是数字,兼容性最好。
容易踩的坑
日和周两段同时限定时,标准 cron 按「或」处理:0 0 1 * 1 是每月 1 号或者每周一,而不是每月 1 号恰好是周一时。想要「每月 1 号」就只写日,周那一段留星号;反之亦然。另外 Cron 没有「每 90 分钟」这种跨小时的步长,*/90 在分钟段会被截断,真要这种频率得靠应用层自己算。
时区是另一个高频问题。crontab 按服务器的本地时区解释,容器里默认往往是 UTC,于是「早上 8 点」实际在本地 16 点跑。部署前用 date 确认时区,或者干脆把服务器 TZ 设成 Asia/Shanghai。本页的执行时间按北京时间推算,已经在跑的表达式想反查含义,用Cron 表达式解析;要算具体日期的间隔用日期间隔。
常见问题
生成的表达式是 5 段还是 6 段?
5 段:分、时、日、月、周。这是 Linux crontab 和大多数调度框架(Quartz 除外)的写法。Quartz 和部分云厂商在前面多一段「秒」,是 6 段,把这里的结果前面补一个 0 就等价于「每分钟的第 0 秒」。
周一到周五怎么表示?
写成 1-5。星期从 0 开始,0 和 7 都表示周日,1 是周一。本工具的「每周」模式勾选后会自动拼成逗号分隔的列表,比如周二和周四就是 2,4,连续的会写成范围,周一到周五是 1-5。
「每天 8 点」为什么写成 0 8 * * *?
第一段是分钟,第二段是小时。0 8 表示 08:00 整点,如果写 8 * 就变成「每小时的 8 分」,差一个位置意思完全不同。日、月、周都用星号表示不限制。
每 5 分钟和「第 5 分钟」有什么区别?
*/5 是步长写法,表示第 0、5、10…55 分钟都执行;只写 5 表示每小时的「第 5 分钟」执行一次,也就是一小时一次。步长必须配合星号或范围使用,单独一个数字不是步长。
下次执行时间按哪个时区算?
按北京时间(UTC+8)计算,和本站其他时间工具保持一致。服务器如果是 UTC,crontab 里的时间会按服务器本地时区解释,部署前要确认 TZ 设置,否则会出现「本地 8 点、实际 0 点跑」的偏差。
日和周同时指定会发生什么?
标准 cron 的惯例是「或」:比如 0 0 1 * 1 表示每月 1 号或者每周一都执行,而不是两者同时满足。想精确控制日期,建议只用一个,另一个留星号。本工具的四种固定模式不会产生这种歧义。