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

cron定时任务

cron定时任务

一、Cron表达式的定义

基础结构

Cron表达式是由空格分隔的6或7个字段组成的字符串,格式为:

秒 分 时 日 月 星期 [年]

其中,年通常可以被省略

字段说明

  1. (0-59)

    秒字段表示每分钟的哪一秒执行任务。取值范围为0-59。

    例如,如果要每分钟的第30秒执行任务,可以使用30 * * * * ?的格式。

  2. (0-59)

    分字段表示每小时的哪一分钟执行任务。取值范围为0-59。

    例如,如果要每小时的第15分钟执行任务,可以使用* 15 * * * ?的格式。

  3. (0-23)

    时字段表示每天的哪一个小时执行任务。取值范围为0-23。

    例如,如果要每天的凌晨2点执行任务,可以使用* * 2 * * ?的格式。

  4. (1-31)

    日字段表示每月的哪一天执行任务。取值范围为1-31。

    例如,如果要每月的第一天执行任务,可以使用* * * 1 * ?的格式。

  5. (1-12或JAN-DEC)

    月字段表示每年的哪一个月执行任务。取值范围为 1-12 或用字符串 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC 表示。

    例如,如果要每年的1月1日执行任务,可以使用* * * 1 1 ?的格式。

  6. 星期(0-6或SUN-SAT,0/7为周日)

    周字段表示每周的哪一天执行任务。取值范围为0-6,也可以用字符串 SUN, MON, TUE, WED, THU, FRI, SAT 表示,其中0表示周日,1表示周一,以此类推。例如,如果要每周的周五执行任务,可以使用* * * * * 5 ?的格式。

二、特殊字符

字符含义示例
*表示所有取值范围内的值,可解读为 “每* * * * * * 每秒执行
?不指定值(仅用于日和星期冲突时)0 0 5 * ? 每天5点
-范围0 9-17 * * * 9点到17点每小时
/步长*/5 * * * * 每5分钟
,枚举0 0 8,12,18 * * 每天8/12/18点
L最后一天0 0 L * * 每月最后一天
W最近工作日0 0 15W * * 15日最近的工作日
#用于指定某个月份的第几个周几,只能作用于 “周” 上0 0 * * 5#2 每月第2个周五

以下是Cron表达式中特殊字符的详细解析(基于2025年最新实践):

1、核心特殊字符

  1. *(通配符)

    • 匹配该字段所有有效值
    • 示例:0 * * * * ? 每分钟的0秒触发
  2. ?(不指定)

    • 仅用于星期字段,解决两者冲突
    • 示例:0 0 12 1 * ? 每月1日中午执行(忽略星期)
  3. /(步长)

    • 表示时间间隔增量
    • 示例:0/15 * * * * ? 每15秒触发

2、范围与枚举

  1. ,(枚举)

    • 指定多个离散值
    • 示例:0 0 8,12,18 * * ? 每天8/12/18点执行
  2. -(范围)

    • 定义连续时间段
    • 示例:0 0 9-17 * * MON-FRI 工作日9-17点每小时执行

3、高级逻辑字符

  1. L(最后一天)

    • 字段:L表示月末最后一天
    • 星期字段:L表示当月最后一个周日
    • 示例:0 0 12 L * ? 每月最后一天中午执行
  2. W(最近工作日)

    • 自动调整到最近的工作日(周一至周五)
    • 示例:0 0 12 15W * ? 每月15日最近的工作日执行
  3. #(第N个星期几)

    • 指定某月第N个特定星期
    • 示例:0 0 12 ? * 5#2 每月第二个周五中午执行

4、特殊组合

组合说明示例
LW当月最后一个工作日0 0 12 LW * ?
L-3月末倒数第3天0 0 12 L-3 * ?
5W5日最近的工作日0 0 12 5W * ?

三、预定义规则

1、核心预定义规则

  1. 基础周期规则

    • @yearly@annually
      每年1月1日 00:00 执行(等效于0 0 1 1 *
    • @monthly
      每月1日 00:00 执行(等效于0 0 1 * *
    • @weekly
      每周日 00:00 执行(等效于0 0 * * 0
    • @daily@midnight
      每天 00:00 执行(等效于0 0 * * *
    • @hourly
      每小时整点执行(等效于0 * * * *
  2. 自定义间隔规则

    • @every <duration>
      支持任意时间间隔(需符合time.ParseDuration格式)
      示例:
      @every 1h30m10s  // 每1小时30分钟10秒
      @every 5m        // 每5分钟
      @every 10s       // 每10秒
      

2、特殊说明

  1. 执行逻辑差异

    • @every的间隔从任务开始运行时计算(非自然时间对齐)
      例如:@every 1h若任务耗时3分钟,则下次执行在57分钟后
  2. 时区处理
    预定义规则默认使用本地时区,可通过以下方式修改:

    // 方法1:全局设置时区
    loc, _ := time.LoadLocation("Asia/Shanghai")
    c := cron.New(cron.WithLocation(loc))// 方法2:单任务指定时区
    c.AddFunc("CRON_TZ=Asia/Tokyo @daily", task)
    

3、使用示例

package main
import ("fmt""github.com/robfig/cron/v3"
)
func main() {c := cron.New()// 添加预定义规则任务c.AddFunc("@hourly", func() { fmt.Println("每小时执行") })c.AddFunc("@every 30m", func() { fmt.Println("每30分钟执行") })c.Start()defer c.Stop()select{}
}
http://www.xdnf.cn/news/165673.html

相关文章:

  • Linux | Mfgtools 修改单独只烧写 Uboot,内核,文件系统
  • 前端面试宝典---vue实现简化版
  • PCL点云处理之基于SAC-IA和ICP的点云配准完整流程(二百四十七)
  • 2025.04.26-美团春招笔试题-第一题
  • java中的Selector详解
  • Qt开发:QSettings的介绍和使用
  • JDK环境变量
  • 备忘录模式 (Memento Pattern)
  • Java 自定义TCP协议:【特点编码字符串<=>字节<=>特点编码16进制】16进制字符串和编码的转换 (各种编码通过字节向16进制的互转)| XOR计算
  • dubbo 异步化实践
  • 【MFA】✈️集成谷歌TOTP实现MFA多因素认证
  • 数组的多种声明方式:类型标注与泛型数组
  • 做大模型应用所需的一点点基础数学理论
  • 扩展和自定义 asammdf 库:满足特定需求的解决方案
  • 文章记单词 | 第46篇(六级)
  • 深度学习中的预训练与微调:从基础概念到实战应用全解析
  • Threejs中顶视图截图
  • javase和java有什么区别
  • spring响应式编程系列:异步生产数据
  • 第八课四则运算 设计运算器
  • 三维重建(二十)——思路整理与第一步的进行
  • 2025上海车展| 和芯星通发布覆盖车载全场景的产品方案
  • [Windows] 易剪媒 v0.0.8 绿色版 —— 跨平台AI批量自动剪辑视频工具
  • 罗技Flow跨电脑控制
  • 三菱PLC软元件 定时器 计数器 状态继电器 编码器
  • Volcano 进阶实战 (二) - (网络拓扑/负载感知)调度
  • 深入解析Dify中的文本清洗处理器:CleanProcessor详解
  • 玩转Pygame绘图:从简单图形到炫酷精灵
  • 构造函数有哪些种类?
  • 敦普水性低温烤漆:金属涂装80℃烘烤的防护体系