提示: 本项目默认使用北京时间 环境变量 TZ=Asia/Shanghai。
测试有效性的网站
默认 Linux 模式适合顶点使用 Crontab 执行时间计算 https://tool.lu/crontab 带7步计算 三种类型
Crontab执行时间计算 https://www.matools.com/crontab 带60步计算 自定义开始。
Crontab执行时间计算 https://tooltt.com/crontab 带9999步计算 大量案例参考。
CRON 表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。
# Crontab 表达式规则:
# 注:Linux 中没有 second,最小是 miniute。
* * * * * *
- - - - - -
| | | | | |
| | | | | +----- 星期几 (0 - 7) (星期天 为 0 or 7)
| | | | +---------- 月份 (1 - 12)
| | | +--------------- 几号 (1 - 31)
| | +-------------------- 小时 (0 - 23)
| +------------------------- 分钟 (0 - 59)
+------------------------------ 秒 (0 - 59)
例:30 21 * * *
表示每晚 21:30 分执行
图解说明: 五位模式:分 时 日 月 周 对应自然值的范围 0-59分 0-23时 1-31日 1-12月 1-7星期 每个位置写上特定的字符表示功能:
N 确定准确值 1 2 3 4 5
* 自然值开始 0 或者 1 开始,有效范围内的数值都会被启用。60 个分、24 个时等
, 多个准确值 1,3,5,17,19
- 设定范围值 2-8 16-23 8-31
/ 间隔值开始 /1 /5
可以多组合
默认每分钟:
* * * * *
间隔5分钟:
*/5 * * * *
表达式案例: 标题和解释 相反义 Crontab表达式的特点
间隔N小时的准确分钟: 分钟位置准确 0点开始间隔小时
18 */3 * * *
30 */4 * * *
45 */6 * * *
间隔N小时内间隔N分钟: 0分钟开始间隔分钟 0时钟开始间隔小时
*/6 */3 * * *
*/15 */4 * * *
*/20 */6 * * *
时钟范围内的每分钟: 每分钟 在时钟范围内
* 9-17 * * *
* 8-20 * * *
* 0-7 * * *
范围时钟内间隔 又 范围分钟内间隔: 特定分钟开始间隔分钟 特定时钟开始间隔小时
10-50/1 1-20/1 * * *
20-40/3 2-10/3 * * *
30-50/6 0-23/6 * * *
指定星期的时分: 固定分钟 固定时钟 每周一三五
30 12 * * 1,3,5
每周指定星期几 又 在当日指定时钟 又 在当时指定分钟: 指定两个分钟 指定两个时钟然后范围内时钟 指定每周一到周三然后周五
15,45 9,15,18-21 * * 1-3,5
每个域允许的值
域 | 必填 | 允许的数值 | 允许的特殊字符 | 备注 |
---|---|---|---|---|
秒(Seconds) | 否 | 0~59 | - * / |
标准实现不支持此字段 |
分(Minutes) | 是 | 0~59 | - * / |
- |
时(Hours) | 是 | 0~23 | - * / |
- |
日(DayofMonth) | 是 | 1~31 | - * ? / L W C |
? L W 只有部分软件实现了 |
月(Month) | 是 | 1~12 | * , - JAN-DEC |
- |
星期(DayofWeek) | 是 | 1~7 | * , ? / L C # SUN-SAT |
1 表示星期天,2 表示星期一,以此类推 |
年(Year) | 否 | 留空,1970~2099 | * , - |
自动生成,工具不显示该值 |
特殊字符的含义
字符 | 含义 | 示例 |
---|---|---|
* |
表示匹配域的任意值 | 在分这个域使用 *,即表示每分钟都会触发事件。 |
? |
表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 | 要在每月的 20 号触发调度,不管每个月的 20 号是星期几,则只能使用如下写法:13 13 15 20 * ? 。其中,因为日期域已经指定了 20 号,最后一位星期域只能用 ? ,不能使用 * 。如果最后一位使用 * ,则表示不管星期几都会触发,与日期域的 20 号相斥,此时表达式不正确。 |
- |
表示起止范围 | 在分这个域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次。 |
/ |
表示起始时间开始触发,然后每隔固定时间触发一次 | 在分这个域使用 5/20,表示在第 5 分钟触发一次,之后每 20 分钟触发一次,即 5、 25、45 等分别触发一次。 |
, |
表示列出枚举值 | 在分这个域使用 5,20,则意味着在 5 和 20 分每分钟触发一次。 |
L |
表示最后,只能出现在日和星期两个域 | 在星期这个域使用 5L,意味着在最后的一个星期四触发。 |
W |
表示有效工作日(周一到周五),只能出现在日这个域,系统将在离指定日期最近的有效工作日触发事件。 | 在日这个域使用 5W,如果 5 号是星期六,则将在最近的工作日星期五,即 4 号触发。如果 5 号是星期天,则在 6 号(周一)触发;如果 5 号为工作日,则就在 5 号触发。另外,W 的最近寻找不会跨过月份。 |
LW |
这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。 | - |
# |
表示每个月第几个星期几,只能出现在星期这个域 | 在星期这个域使用 4#2,表示某月的第二个星期三,4 表示星期三,2 表示第二个。 |