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.mzph.cn/diannao/80571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式之易混淆概念

昨天写UE写的破防了&#xff0c;忘了写文章&#xff0c;今天补一下分布式的一些概念。&#x1f61a; 在软件架构领域&#xff0c;微服务、领域驱动设计&#xff08;DDD&#xff09;和分布式系统是三个高频且容易被混淆的概念。许多开发者误以为它们是“同一件事的不同说法”&a…

量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体终局篇)

开篇数字免疫系统的范式革命 在2025年某国际金融峰会期间&#xff0c;黑客组织利用量子计算技术对全球37个交易系统发起协同攻击。传统安全组件在2.7秒内集体失效&#xff0c;造成每秒超18亿美元的交易漏洞。这场数字"切尔诺贝利"事件促使我们重新定义前端安全——组…

Operating System 实验七 Linux文件系统实验

实验目标: 使用dd命令创建磁盘镜像文件ext2.img并格式化为ext2文件系统,然后通过mount命令挂载到Linux主机文件系统。查看ext2文件系统的超级块的信息,以及数据块的数量、数据块的大小、inode个数、空闲数据块的数量等信息 在文件系统中创建文件xxxxx.txt(其中xxxxx为你的学…

模型识别能力锤炼及清单

大脑将注意力分配给需要消耗脑力的活动&#xff0c;通过学习技能&#xff0c;大脑也能更轻松的工作。这个时候&#xff0c;大脑负责管理注意力控制和努力控制的区域活动会大幅减少。沉浸式学习是学习一门新的语言的最佳方式&#xff0c;也是深入洞察错综复杂商业环境的绝佳途径…

Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案

整个应用&#xff08;包括 View 和 Compose 部分&#xff09;的浅色/深色模式保持一致。以下是完整的解决方案&#xff1a; 全局配置方案 1. 基础主题设置 在 res/values/themes.xml 和 res/values-night/themes.xml 中定义统一的主题&#xff1a; <!-- values/themes.x…

QT开发技术【QT实现桌面右下角消息】

一、效果 ![ 二、弹窗主体部分 noticewidget /* ** File name: NoticeWidget.h ** Author: ** Date: 2025-04-25 ** Brief: 通知栏控件 ** Copyright (C) 1392019713qq.com All rights reserved. */#include "../Include/NoticeWidget.h"…

在LiveGBS GB28181互联网安防监控平台中关于redis版本切换的方法说明

目录 1、Redis服务2、如何切换REDIS? 2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动3、搭建GB28181视频直播平台 1、Redis服务 在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存服务。默认LiveCMS解压目录下会携带一个REDIS服务。如果已经有自…

vue3中的effectScope有什么作用,如何使用?如何自动清理

vue3中的effectScope有什么作用&#xff0c;如何使用?如何自动清理 vue3中的effectScope有什么作用&#xff0c;如何使用 官网介绍&#xff1a;作用特点简单示例&#xff1a;自动清理示例 官网介绍&#xff1a; 创建一个 effect 作用域&#xff0c;可以捕获其中所创建的响应…

搭建基于火灾风险预测与防范的消防安全科普小程序

基于微信小程序的消防安全科普互动平台的设计与实现&#xff0c;是关于微信小程序的&#xff0c;知识课程学习&#xff0c;包括学习后答题。 技术栈主要采用微信小程序云开发&#xff0c;有下面的模块&#xff1a; 1.课程学习模块 2.资讯模块 3.答题模块 4.我的模块 还需…

python 与Redis操作整理

以下是使用 Python 操作 Redis 的完整整理&#xff0c;涵盖基础操作、高级功能及最佳实践&#xff1a; 1. 安装与连接 (1) 安装库 pip install redis(2) 基础连接 import redis# 创建连接池&#xff08;推荐复用连接&#xff09; pool redis.ConnectionPool(hostlocalhost, …

什么时候使用Python 虚拟环境(venv)而不用conda

是的&#xff01;python3.9 -m venv rtdetr_env 是 Python 原生的虚拟环境&#xff08;venv&#xff09;&#xff0c;而 conda 是另一个流行的虚拟环境管理工具&#xff08;来自 Anaconda/Miniconda&#xff09;。下面我会详细对比两者的区别&#xff0c;并讲解 venv 的基本用法…

ubuntu20.04安装x11vnc远程桌面

x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录ubuntu桌面。 安装x11vnc sudo apt-get install x11vnc 设置VNC登录密码 sudo x11vnc -storepasswd /etc/x11vnc.pwd 设置x11vnc在开机时自动启动 新建如下文件: sudo vi /lib/systemd/sys…

Maven的概念与初识Maven

目录 一、Maven的概念 1. 什么是Maven 2. 项目构建&#xff1a;从代码到部署的标准化流程 2.1 Maven构建生命周期 2.2 传统构建 vs Maven构建 3. 依赖管理&#xff1a;解决“JAR地狱”的利器 3.1 依赖声明 3.2 依赖传递与冲突解决 4. Maven仓库&#xff1a;依赖的存储…

Unity-Shader详解-其二

前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定&#xff1a; 我们也可以在Main Camera这里进行设置&#xff1a; 那这里我们首先介绍一下两种渲染&#xff08;Forward R…

C++ 中 std::tuple 使用详解

C 中 std::tuple 使用详解 基本概念 std::tuple 是 C11 引入的模板类&#xff0c;用于打包任意数量、任意类型的值在一起。可看作是类型安全的变长结构体。 #include <tuple>std::tuple<int, std::string, double> t(42, "hello", 3.14);创建 tuple 的…

WebRTC基于网页的视频会议,手写WebRTC流程(html)

WebRTC是web real-time communication网页及时通信的缩写&#xff0c;通过javascript就可以实现网页会话&#xff0c;基于浏览器开发出来多媒体应用&#xff0c; 以下是手写的WEBRTC调用本地摄像头的html代码&#xff0c;直接用浏览器打开&#xff0c;就可以使用 <!DOCTYPE…

MyBatis 官方子项目详细说明及表格总结

MyBatis 官方子项目详细说明及表格总结 1. 核心子项目说明 1.1 mybatis-3 GitHub 链接&#xff1a;https://github.com/mybatis/mybatis-3功能&#xff1a; MyBatis 核心框架的源码&#xff0c;提供 SQL 映射、动态 SQL、缓存、事务管理等核心功能。主要功能&#xff1a; 支持…

【虚幻C++笔记】碰撞检测

目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…

推论阶梯——AI与思维模型【81】

一、定义 推论阶梯思维模型是一种用于分析和理解人们如何从观察到的事实,经过一系列的假设、推理和判断,最终得出结论的思维过程的理论框架。它将这个过程比喻为一个阶梯,每一步都建立在前一步的基础上,逐渐形成一个完整的推论。这个模型帮助我们意识到在思考和决策过程中…

小刚说C语言刷题——1109加密四位数

1.题目描述 某军事单位用 4位整数来传递信息&#xff0c;传递之前要求先对这个 4 位数进行加密。加密的方式是每一位都先加上 5然后对 10取余数&#xff0c;再将得到的新数颠倒过来。 例如&#xff1a;原数是 1379 &#xff0c;那么每位加 55对 10 取余数的结果为 6824 &…