【Java基础系列】Cron表达式入门

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.什么是 cron?
      • 2.cron 格式?
      • 3.域标识
      • 4.特殊字符
      • 5.注意事项
    • 二.常用案例
      • 1.每分钟
      • 2.指定小时
      • 3.日期小时
      • 4.月最后一天小时
      • 5.周六凌晨 3 点
      • 6.指定分钟
      • 7.例子汇总
    • 三.细节说明
      • 1.秒
      • 2.分
      • 3.时
      • 4.天(月)
      • 5.月
      • 6.天(周)
      • 7.年

一.基本介绍

1.什么是 cron?

Cron(又称为 cron 表达式或 cron job)是一种在 Unix 和类 Unix 操作系统中用于定期执行任务的时间表达式。Cron 表达式定义了任务应该在何时执行,通常用于自动化系统维护、数据备份、日志轮转等周期性任务。

Cron 表达式的灵活性使得它成为任务调度和自动化的强大工具,广泛应用于服务器管理、系统维护以及应用程序的定时任务等场景。在不同的操作系统和编程环境中,cron 的具体实现方式可能会有所不同。

2.cron 格式?

Cron 表达式的格式通常为:

秒(0-59) 分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-7, 其中0和7表示星期天)[秒] [分] [时] [日] [月] [周] [年]

通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成

其中,星期既可以使用数字(0 表示星期天,1 表示星期一,以此类推),也可以使用缩写的英文单词(如 SUN、MON 等)。

3.域标识

是否必填值以及范围通配符
0-59, - * /
0-59, - * /
0-23, - * /
1-31, - * ? / L W
1-12 或 JAN-DEC, - * /
1-7 或 SUN-SAT, - * ? / L #
1970-2099, - * /

4.特殊字符

此外,还可以使用特殊字符来表示一些特殊的情况,例如:

  • , 这里指的是在两个以上的时间点中都执行,如果我们在 “分” 这个域中定义为 8,12,35 ,则表示分别在第 8 分,第 12 分 第 35 分执行该定时任务。
  • - 这个比较好理解就是指定在某个域的连续范围,如果我们在 “时” 这个域中定义 1-6,则表示在 1 到 6 点之间每小时都触发一次,用 , 表示 1,2,3,4,5,6
  • * 表示所有值,可解读为 “每”。 如果在“日”这个域中设置 *,表示每一天都会触发。
  • ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的 8 号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8 * ?
  • / 在某个域上周期性触发,该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 5/10 表示从 第 5 秒开始 每 10 秒执行一次,而在 “分” 上则表示从 第 5 秒开始 每 10 分钟执行一次。
  • L 表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”
  • W 表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置”15W”,表示离每月 15 号最近的那个工作日触发。假如 15 号正好是周六,则找最近的周五(14 号)触发, 如果 15 号是周未,则找最近的下周一(16 号)触发.如果 15 号正好在工作日(周一至周五),则就在该天触发。如果是 “1W” 就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
  • # 表示每月的第几个周几,只能作用于 “周” 上。例如 ”2#3” 表示在每月的第三个周二。

5.注意事项

  • 一般是有 6 个位置,分别表示 分 秒 时 天 (月) 月 天 (周) 第 7 个位置是年,一般省略
  • 6 个位置中的 天 (月) 表示一个月中的第几天,即是几月几号中的几号;天 (周) 表示一周中的第几天,周日为第一天,周六为第七天
  • 天 (月) 天 (周)不能同时指定,其中必定有一个是 ?
  • ? 只能用在 天 (月) **和**天 (周)
  • 2-10:符号 - 表示范围区间
  • 2/10:符号 / 表示频率,从 2 开始,每隔 10,即 2,12,22… 类推
  • 2,10:符号 , 表示和,2,10表示 2 和 10
  • L:last 的缩写,表示最后,只能用在天 (月) 和天 (周),一般和数字搭配使用,如 L 在天 (月) 中表示一个月中的最后一天,L-1 则表示每个月的倒数第二天;3L 在天 (周) 中则表示最后一个星期二

二.常用案例

1.每分钟

每隔1分钟执行一次:0 */1 * * * ?

2.指定小时

每天22点执行一次:0 0 22 * * ?

3.日期小时

每月1号凌晨1点执行一次:0 0 1 1 * ?

4.月最后一天小时

每月最后一天23点执行一次:0 0 23 L * ?

5.周六凌晨 3 点

每周周六凌晨3点实行一次:0 0 3 ? * L

6.指定分钟

在24分、30分执行一次:0 24,30 * * * ?

7.例子汇总

  • 每隔 5 分钟执行一次(从 0 分开始)
0 0/5 * * * ?
  • 从 0 时开始,每小时执行一次
0 0 0/1 * * ?
  • 每天的 7 点 30 分
0 30 7 * * ?
  • 工作日的早上 6 点 30 分(即是周一到周五,每天早上的 6 点 30 分)
0 30 7 ? * MON-FRI
  • 每个月的最后一天早上的 10 点整
0 0 10 L * ?
  • 每个月的最后一个工作日的晚上 6 点 30 分(18:30)
0 30 18 LW * ?
  • 朝九晚五,每小时
0 0 9-17 * * ?
  • 2020 年的 8 月份每个星期六和星期日早上 10 点 28 分 28 秒
28 28 10 ? 8 1,7 2020
  • 每个月的倒数第二天的早上 8 点整
0 0 8 L-1 * ?
  • L 表示最后一天(倒数第一天),L-1 则表示倒数第二天,以此类推

三.细节说明

1.秒

0-59 , - * /

  • 26:表示第 26 秒
  • 5,16,27:表示第 5 秒、第 16 秒和第 27 秒
  • 1-5:表示从 1 秒到 5 秒,就是 1 2 3 4 5 秒
  • *:表示每一秒
  • 2/15:表示从第 2 秒开始,每隔 15 秒,就是 2 17 32 47 秒

2.分

0-59 , - * /

根据上述的秒,同理可得

  • 26:表示第 26 分钟
  • 5,16,27:表示第 5 分钟、第 16 分钟和第 27 分钟
  • 1-5:表示从 1 秒到 5 分,就是第 1 2 3 4 5 分钟
  • *:表示每一分钟
  • 2/15:表示从第 2 分钟开始,每隔 15 分钟,就是 2 17 32 47 分钟

3.时

0-23 , - * /

  • 10:表示早上 10 点
  • 22:表示晚上 10 点
  • 2,8,18,23:表示凌晨 2 点,早上 8 点,傍晚 6 点和晚上 11 点
  • 9-17:表示朝九晚五,就是 9 10 11 12 13 14 15 16 17 点
  • *:表示每小时
  • 10/2:表示从早上 10 点开始,每隔 2 小时

4.天(月)

1-31 , - * / ? L W C

  • 31:表示 31 号(注意有的月份是没有 31 号的)
  • 5,10,15:表示 5 号、10 号和 15 号
  • 8-17:表示 8 号到 17 号
  • *:表示所有可能的值(当指定为星号时,天(周)需指定为?)
  • 5/9:表示从 5 号开始,每隔 9 天
  • ?:当天(周)指定任意值的时候,天(月)需要设置为?
  • L:表示一个月中的最后一天
  • 6L:表示倒数第 6 天
  • 15W:W 指工作日,如果 15 号不是周六日,则表示 15 号当天;如果 15 号是周六,则表示 14 号;如果 15 号是周日,则表示 16 号;如果 31W 是周日,则 31W 表示 29 号(周五),不会跨月
  • LW:指最后一个工作日
  • 15C:表示第 15 天(不是很明白这个,使用 15 和 15C 貌似效果相同?)

5.月

1-12 , - * /

  • 10:表示 10 月份
  • 5,10,11:表示 5 月份、10 月份和 11 月份
  • 4-8:表示 4 月份到 8 月份
  • *:表示所有可能的值
  • 5/2:表示从 5 月份开始,每隔 2 个月,(就是 5 7 9 11 次年 5 次年 7 次年 9…)
  • 1-12:也可以用 JAN-DEC 表示

6.天(周)

MON-SAT , - * / ? L C #

  • MON:表示周一
  • MON,TUE,FRI:表示周一,周二和周五
  • MON-FRI:表示从周一到周五
  • MON-WED,SAT:表示从周一到周三,和周六(就是周一、周二、周三和周六)
  • mon,tue,wed,thu,fri,sat,sun:表示周一到周日(大小写均可,取星期英文前三个字母,注意星期四是 thu,而不是 thur)
  • 7L:表示最后一个周六(效果等同于 SATL)(L 表示 last 最后的意思,7 表示周六,6 表示周五,类推,1 表示周日)
  • 6C:表示周五以及之后包含周五的日期(感觉效果 FRI 一样,具体还没深究)
  • 7#2:表示第二个周六(# 前面的数字表示星期,1 表示周日,2 表示周一,以此类推;# 后面的数字表示第几个)

7.年

留空 2020-2099 , - * /

  • 2050:表示 2050 年
  • 2020,2030,2040:表示 2020 年、2030 年和 2040 年
  • 2020-2030:表示 2020 年到 2030 年
  • *:表示所有可能的值
  • 2020/10:表示从 2020 年开始,每隔 10 年,(就是 2020,2030,2040…)

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207431.shtml

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

相关文章

优秀案例 | 元宇宙双语财经科技主播“舒望”主持首届粤港澳大湾区元宇宙国际传播论坛

12月6日,由南方财经全媒体集团指导、大湾区元宇宙国际传播实验室(GBA MIC Lab)主办、南财国际传播中心和21世纪经济报道共同承办,以“多元共创开放共享”为主题的首届粤港澳大湾区元宇宙国际传播论坛在广州隆重开幕。 “立足湾区,…

Kubernetes - 为什么 K8S 在容器里不能调用自己?

问题描述 最近遇到一个神奇的现象,在 K8S 的 POD 容器中,比如 pod name:mini-appnamespace:devport:5050 那么,是无法在 mini-app 容器里执行以下命令,如果执行,会一直卡在这条命…

一文详解Java单元测试Junit

文章目录 概述、Junit框架快速入门单元测试概述main方法测试的问题junit单元测试框架优点:使用步骤: 使用案例包结构 Junit框架的常见注解测试 概述、Junit框架快速入门 单元测试概述 就是针对最小的功能单元(方法),…

ROS rosbag

在ROS中的rosbag是一个命令行工具,主要用于记录、回放和分析rostopic中的数据。它可以将指定rostopic中的数据记录到.bag后缀的数据包中,以便于进行离线分析和处理。 在ROS系统中,rosbag可以通过命令行工具或ROS节点来使用。 通过rosbag命令…

数字图像处理(实践篇)十九 漫水填充

目录 一 漫水填充算法--FloodFill 二 涉及的函数 三 实践 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是选中与种子点相连接的区域,利用指定颜色进行区域颜色填充。可以通过设置连通方式或像素的范围控制填充的效果。通常是用来标记或者分离图像的一部…

进程地址空间

引入地址空间 静态变量和栈空间变量 静态变量默认是被初始化的 存放在初始化和为初始化空间中 static已经变成了全局变量 命令行参数和环境变量的增长方向 这里观察的是命令行参数和环境变量的地址 观察命令行和环境变量表的地址 进程地址空间 如果他们是同一块儿空间&am…

Ubuntu22.04 交叉编译fdk-aac for Rv1106

一、下载fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、编译 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

软件测试——集成测试

集成测试是在单元测试之后,将各个独立单元(通常是已经通过单元测试的模块或组件)组合在一起,测试它们在一起协同工作的过程。以下是进行集成测试的一般步骤和最佳实践: 1. 明确定义集成测试的目标 确定集成测试的目标…

麒麟v10 数据盘初始化 gpt分区

麒麟v10 数据盘初始化 gpt分区 1、查看磁盘 lsblk2 、分区 parted2.1、 设置磁盘分区形式2.2、 设置磁盘的计量单位为磁柱2.3、 分区2.4、 查看分区 3、分区格式化4、 挂载磁盘4.1、新建挂载目录4.2、挂载磁盘4.3、查看挂载结果 5、设置开机自动挂载磁盘分区5.1、 查询磁盘分区…

ClamAV开源病毒库使用例子

ClamAV是一个开源的反病毒引擎,用于检测恶意软件和病毒。ClamAV提供了一个名为cl_scanfile的函数,用于扫描单个文件是否包含病毒。以下是一个使用cl_scanfile函数的示例代码: 首先,确保已经安装了ClamAV库。在Debian/Ubuntu系统中…

用AI来纠正错别字和修饰文字

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在使用谷歌翻译或百度翻译将英语翻译成中文时,有些句子读起来不太流畅。我尝试使用AI来帮助我修改翻译后的中文,希望能让句子更符合中文习惯。 使用百度文心一言尝试一下。 文心一言的链接是这个&#x…

VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符

1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墙服务配置

从 RHEL/CentOS 7开始&#xff0c;使用新的防火墙服务——firewalld。这里介绍该防火墙服务的基本用法 一、防火墙服务管理&#xff1a;从 RHEL/CentOS 7开始采用Systemd作为新的系统管理器&#xff0c;而systemctl则是Systemd中用于管理服务的命令 # 启动防火墙服务 systemct…

谷歌Gemini刚发就惹质疑:测试标准有失偏颇,效果视频疑似剪辑

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 谷歌憋了许久的大招&#xff0c;双子座Gemini大模型终于发布&#xff01;其中一图一视频最引人注目&#xff1a; 一图&#xff0c;MMLU多任务语言理解数据集测试&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

OpenGL学习资料

1.学习网站 Song Ho Ahn LearnOpenGL GAMES101:现代计算机图形学入门 OpenGL 官网 2.书籍 Fundamentals of computer graphics OpenGL ES 3.0编程指南 计算机图形学(OpenGL版)第3版 3.参考的一些文章 颜色缓冲区 深度缓冲 VBO&#xff0c;VAO和EBO详解 深入探索透视投影变…

实战干货!基于ERNIE Bot SDK的数字诗人聊天开发教程

随着人工智能技术的不断迭代发展&#xff0c;数字人的开发与应用需求也与日俱增&#xff0c;并且随着大语言模型的发展&#xff0c;数字人也更智能&#xff0c;从最初的语音预制到现在的实时交流&#xff0c;目前已在很多场景都有广泛应用。 虚拟客服&#xff1a;数字人可以通…

Mysql自动备份脚本(本地备份、远程备份、删除冗余备份)

Mysql自动备份脚本&#xff08;本地备份、远程备份、删除冗余备份&#xff09; 1. 脚本功能 自动备份mysql数据到服务器上&#xff0c;可以通过linux的 crontab定义备份周期。 自动删除七天前的备份数据。 2. 脚本内容 #!/bin/bash # auth Eric source /etc/profile # 设…

【EMNLP 2023】基于知识迁移的跨语言机器阅读理解算法

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队、达摩院自然语言处理团队合作在自然语言处理顶级会议EMNLP2023上发表基于机器翻译增加的跨语言机器阅读理解算法X-STA。通过利用一个注意力机制的教师来将源语言的答案转移到目标语言的答案输出空间&#x…

计算机网络高频面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…

套接字应用程序

这章节是关于实现 lib_chan 库的 。 lib_chan 的代码在 TCP/IP 之上实现了一个完整的网络层&#xff0c;能够提供认证和Erlang 数据流功能。一旦理解了 lib_chan 的原理&#xff0c;就能量身定制我们自己的通信基础结构&#xff0c;并把它叠加在TCP/IP 之上了。 就lib_chan 本身…