CI/CD—Jenkins cron定时任务表达式
Jenkins cron定时任务表达式
Jenkins 使用类似于 Unix Cron 表达式的语法来配置定时任务,这些表达式可以精确控制任务的执行时间。以下是关于 Jenkins Cron 定时任务表达式的详细介绍:
基本语法
Jenkins Cron 表达式由五个或六个字段组成,每个字段代表不同的时间单位,各字段之间用空格分隔,其基本格式如下:
分 时 日 月 周 [年]
其中,“年” 字段是可选的,一般较少使用,下面主要介绍前五个字段。
各字段含义及取值范围
- 分(Minutes):取值范围是 0 - 59,表示一个小时内的分钟数。
- 时(Hours):取值范围是 0 - 23,表示一天中的小时数。
- 日(Day of month):取值范围是 1 - 31,表示一个月中的日期。
- 月(Month):取值范围可以是 1 - 12 的数字,也可以是
JAN
、FEB
、MAR
等英文缩写,表示一年中的月份。- 周(Day of week):取值范围是 0 - 7(0 和 7 都表示星期日),也可以是
SUN
、MON
、TUE
等英文缩写,表示一周中的星期几。特殊字符及含义
*
(星号):表示该字段可以取所有可能的值。例如,在 “分” 字段使用*
,表示每分钟;在 “时” 字段使用*
,表示每小时。
- 示例:
* * * * *
表示每分钟执行一次任务。/
(斜杠):用于指定时间间隔。例如,*/5
表示每隔 5 个时间单位执行一次。
- 示例:
*/10 * * * *
表示每隔 10 分钟执行一次任务。,
(逗号):用于指定多个值。例如,15,30,45
表示在第 15 分钟、第 30 分钟和第 45 分钟执行。
- 示例:
15,30 9-12 * * *
表示在 9 点到 12 点之间的第 15 分钟和第 30 分钟执行任务。-
(连字符):用于指定一个范围。例如,9-12
表示从 9 到 12 的时间范围。
- 示例:
0 9-12 * * *
表示在 9 点到 12 点的整点执行任务。?
(问号):仅用于 “日” 和 “周” 字段,用于表示不指定具体的值。当其中一个字段已经指定了具体日期时,另一个字段可以使用?
来避免冲突。
- 示例:
0 12 ? * WED
表示每周三的 12 点执行任务。常见示例
- 每天凌晨 2 点执行:
0 2 * * *
- 每小时的第 15 分钟执行:
plaintext
15 * * * *
- 周一到周五的 9 点到 17 点,每隔 30 分钟执行:
plaintext
*/30 9-17 * * 1-5
- 每月 1 号和 15 号的 10 点执行:
0 10 1,15 * *
Jenkins 特有的字符 “H”
在 Jenkins 中,“H” 代表 “Hash”,用于在时间分布上实现更均匀的负载。例如,
H 0 * * *
表示在 00:00 - 00:59 这个小时内均匀分布执行任务,避免多个任务在同一时刻集中执行。注意事项
- 时间以 Jenkins 服务器的系统时间为准:确保 Jenkins 服务器的系统时间设置正确,否则任务可能不会按照预期时间执行。
- 任务执行时间可能受系统负载影响:如果 Jenkins 服务器负载过高,任务可能无法精确按照 Cron 表达式指定的时间执行。
分散负载: ”H “ 与 ” * “ 的区别
在不同的技术场景中, “H” 和 “*” 在分散负载方面可能有不同的含义,下面以常见的定时任务调度和负载均衡配置等场景为例进行分析:
定时任务调度(如 Cron 表达式或类似的时间调度规则)
含义
- “H”(Hash):在一些任务调度系统(例如 Jenkins 的定时任务配置)里,“H” 代表 “Hash”,用于在时间分布上实现更均匀的负载。当使用 “H” 时,系统会根据任务的名称或其他唯一标识计算一个哈希值,然后根据这个哈希值将任务均匀地分散到指定的时间范围内。
- 示例:假设你有多个需要在每天凌晨执行的任务,如果都使用固定时间点(如 00:00),可能会导致系统在该时刻出现负载高峰。使用 “H 0 * * *” 可以让这些任务在 00:00 - 00:59 这个小时内均匀分布执行,避免瞬间的高负载。
- “*”(任意值):“” 表示在该时间字段上可以取任意值。例如在 Cron 表达式中,“” 在分钟字段表示每分钟,在小时字段表示每小时。
- 示例:“* * * * *” 表示每分钟都执行一次任务。这种配置会使任务在每个时间单位都触发,可能会导致在同一时间点有大量任务集中执行,从而增加系统负载。
区别总
- “H” 旨在分散负载,使任务在指定的时间范围内均匀分布执行,减少系统在特定时间点的负载压力。
- “*” 会让任务在每个可能的时间点都执行,容易造成系统在某些时间点的负载过高。
负载均衡配置(如路由规则)
含义
- “H”:在某些负载均衡器的配置规则里,“H” 可能是自定义的规则标识,用于匹配特定的条件(如特定的主机名、请求头中的某个值等),然后根据这些匹配条件将请求分散到不同的后端服务器。
- 示例:假设配置规则为 “H: example.com”,表示当请求的主机名是 “example.com” 时,将请求分散到特定的一组后端服务器。
- “*”:通常表示通配符,匹配所有情况。在负载均衡配置中,如果使用 “*”,则意味着所有的请求都会被应用该规则进行处理。
- 示例:配置规则为 “* -> backend_server_group”,表示所有的请求都会被分发到 “backend_server_group” 这个后端服务器组。
区别总结
- “H” 用于根据特定条件进行负载分散,只有满足特定条件的请求才会按照相应规则处理。
- “*” 是一个通用的匹配规则,会将所有请求都纳入负载分散的范围。
一、定时任务配置步骤
1、每分钟都执行
* * * * *
2、与crontab定时任务类似如果是 ” H “ 表示任意随机数,如果是 ” * “ 就具体到时间
1-45分钟之间的任意分钟
H(1-45) * * * *
3、在接下来的20分钟内执行也表示任意
H/20 * * * *
4、每个小时的具体时间取0-60分钟的hash值
H * * * *
5、起始时间不固定步长是10分钟去任意值
H/10 * * * *
6、每一到周六,每天凌晨2点1-30之内取hash值,执行一次
H(1-30) 2 * * 1-6