当前位置: 首页 > article >正文

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 的数字,也可以是 JANFEBMAR 等英文缩写,表示一年中的月份。
  • 周(Day of week):取值范围是 0 - 7(0 和 7 都表示星期日),也可以是 SUNMONTUE 等英文缩写,表示一周中的星期几。

特殊字符及含义

  • *(星号):表示该字段可以取所有可能的值。例如,在 “分” 字段使用 *,表示每分钟;在 “时” 字段使用 *,表示每小时。
    • 示例:* * * * * 表示每分钟执行一次任务。
  • /(斜杠):用于指定时间间隔。例如,*/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


http://www.kler.cn/a/579628.html

相关文章:

  • 【微知】qemu如何配置ctrl+c不退出qemu系统?(-chardev stdio,id=char0,signal=off)
  • Go泛型学习笔记
  • C++二叉搜索树代码
  • 旋转验证码截图识别
  • ⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐
  • Easysearch 使用 AWS S3 进行快照备份与还原:完整指南及常见错误排查
  • 蓝桥杯[每日两题] 真题:好数 神奇闹钟 (java版)
  • 【微知】如何根据内核模块ko查看所依赖其他哪些模块?(modinfo rdma_ucm |grep depends)
  • 【Java学习】包装类
  • 基于策略模式的智能提示语生成器设计与实现——以Tkinter GUI开发为例
  • 一文了解汽车图像传感器
  • 1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?
  • 逐梦DBA:Linux下MySQL字符集的处理
  • OkHttp 之任务调度模块源码分析
  • 为php添加额外的功能模块
  • 论文阅读笔记——OpenVLA: An Open-Source Vision-Language-Action Model
  • YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报
  • 数据量过大的时候导出数据很慢
  • 链式多分支规则树模型结构
  • robotjs获取鼠标位置