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

Cron表达式的用法

最近几天开发东西用到了定时脚本的问题,中间隔了一段时间没有用到,再次复习一下Cron表达式的用法。

Cron表达式是一种用于定义定时任务执行时间的字符串格式,广泛应用于Unix/Linux系统以及各种编程语言中。其主要用途是通过灵活的时间规则来安排任务的触发时间,从而实现自动化任务调度。

  1. 基本语法与结构
    Cron表达式由六个或七个字段组成,每个字段之间用空格分隔,分别表示秒、分钟、小时、日期、月份、星期和年份(可选)。例如:

          * * * * * * *

  • 第一个*:秒(0-59)
  • 第二个*:分钟(0-59)
  • 第三个*:小时(0-23)
  • 第四个*:日期(1-31)
  • 第五个*:月份(1-12)
  • 第六个*:星期(0-6,其中0表示周日)
  • 第七个*:年(可选)

特殊字符的含义 

  • * :匹配所有的值。在分钟、小时、日期、月份和星期中使用时,表示“每个”或“任何”。
  • ? :只能在日期和星期中使用,表示“无意义”或“不适用”。例如,如果您想在每月的第一天执行任务,但无论这一天是星期几,可以将日期字段设置为1,将星期字段设置为?
  • -:指定一个范围。例如,1-5表示1到5的值。
  • ,:指定多个值。例如,MON,WED,FRI表示星期一、星期三和星期五。
  • /:指定一个增量。例如,0/5表示从0秒开始,每5秒执行一次。
  • L :只能在日期和星期中使用。在日期字段中,表示这个月的最后一天;在星期字段中,表示这个月的最后一个星期几。例如,L在日期字段中表示每个月的最后一天,5L表示这个月的最后一个星期五。
  • W :只能在日期字段中使用,表示最近的工作日(周一至周五)。“W”可以和具体的日期或者“L”连用,例如15W表示这个月的第15个工作日,LW表示这个月的最后一个工作日。
  • # :只能在星期字段中使用,表示这个月的第几个星期几。例如,2#1表示这个月的第一个星期二。

注意:在Cron表达式中,要保证各个字段的取值之间没有冲突,否则定时任务可能无法按照预期执行。

Cron表达式的常用示例

以下是一些常用的Cron表达式示例:

1. 每天早上6点执行一次:

0 6 * * *

2. 每小时的第30分钟执行一次:

30 * * * *

3. 每隔5分钟执行一次:

*/5 * * * *

4. 每月的第一天早上7点执行一次:

0 7 1 * *

5. 每周的周日下午3点执行一次:

0 15 * * 0

6. 每年的1月1日早上5点执行一次:

0 5 1 1 *

7. 每个工作日早上8点到下午5点之间,每隔30分钟执行一次:

*/30 8-17 * * 1-5

其中,第1、2、4、5、6个示例比较常见,可以根据实际需求进行修改;第3个示例可以根据需要修改步长和时间间隔;第7个示例比较复杂,含义是每个工作日(周一至周五)的早上8点到下午5点之间,每隔30分钟执行一次。

Cron表达式的高级用法

使用通配符

通配符可以在任何字段中使用,表示匹配所有可能的值。在分钟和小时字段中,""表示匹配0到59和0到23的所有值,而在日和月字段中,""表示匹配1到31和1到12的所有值。在周几字段中,"*"表示匹配0到6,其中0表示周日,1表示周一,以此类推。

使用时间增量

时间增量可以在任何字段中使用,表示从指定的起始时间开始,每隔一定时间执行任务。在分钟和小时字段中,"/"后面的数字表示增量,例如"/5"表示每隔5分钟执行一次任务。在日和月字段中,"/"后面的数字表示间隔的天数或月数,例如"/2"表示每隔2天执行一次任务。在周几字段中,"/"后面的数字表示间隔的周数,例如"*/3"表示每隔3周执行一次任务。

使用将多个表达式组合

可以使用逗号和连字符将多个表达式组合在一起,以指定更复杂的时间表。例如,"0 8-12,14-18 * * *"表示每天的8:00到12:00和14:00到18:00之间执行任务。另外,可以使用括号来分组表达式,以便更精细地控制任务的执行时间。例如,"(0 10 * * 1-5),(0 16 * * 1-5)"表示每周一至周五的10:00和16:00执行任务。

 

http://www.xdnf.cn/news/287659.html

相关文章:

  • cudaMalloc函数说明
  • 5.5刷题map和set的使用
  • 笔试专题(十五)
  • 3小时超快速入门Python
  • 字符串,数组,指针之间的关系
  • Python实现自动驾驶中的车道检测算法:从理论到实践
  • win10开了移动热点,手机无法连接,解决办法(chatgpt版)
  • 手机SIM卡打电话时识别对方按下的DTMF按键(二)
  • SpringBoot整合RabbitMQ(Java注解方式配置)
  • CMake基础介绍
  • D. Pythagorean Triples 题解
  • 手机打电话时由对方DTMF响应切换多级IVR语音应答(一)
  • \documentclass[lettersize,journal]{IEEEtran}什么意思
  • 机器人强化学习入门学习笔记(二)
  • DeepSeek-Prover-V2:数学定理证明领域的新突破
  • Dify网页版 + vllm + Qwen
  • Matlab自学笔记五十三:保存save和载入load
  • 杨校老师竞赛课之C++备战蓝桥杯初级组省赛
  • Python爬虫实战:获取优美图库各类高清图片,为用户提供设计素材
  • 洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)
  • 【从零开始学习微服务 | 第一篇】单体项目到微服务拆分实践
  • 本地MySQL连接hive
  • ASP.NET Core 请求限速的ActionFilter
  • 算法中的数学:质数(素数)
  • 30天通过软考高项-第十一天
  • CodeBlocks25配置wxWidgets3.2
  • 004-nlohmann/json 快速认识-C++开源库108杰
  • 地埋式燃气泄漏检测装置与地下井室可燃气体检测装置有什么区别
  • 专业课复习笔记 4
  • Vue中的过滤器参数:灵活处理文本格式化