惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
M
MIT News - Artificial intelligence
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V2EX - 技术
V2EX - 技术
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
SegmentFault 最新的问题
I
InfoQ
H
Hacker News: Front Page
D
Docker
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
博客园 - 【当耐特】
T
Tor Project blog
U
Unit 42
H
Heimdal Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Privacy & Cybersecurity Law Blog
PCI Perspectives
PCI Perspectives
美团技术团队
O
OpenAI News
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
GbyAI
GbyAI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MyScale Blog
MyScale Blog

博客园 - 陈大欠

Step Builder:让对象构建有顺序、有边界、有校验 基于 Attribute 的 AOP 字段校验 浅析 .NET 响应式编程 IObservable与ReactiveX 正则表达式拾遗 快速批量升级 NugetPackage 版本 C# IEquatable和IEqualityComparer 最佳实践 使用XDT提高开发效率 如何保证XML正确性 分析 Dump 入门简明教程 Git commit emoji 对照表 ELK Stack 笔记 HTML5/CSS3(PrefixFree.js) 3D文字特效 Jquery实现图片上下一张 js css 构建滚动边框 使用jquery构建Metro style 返回顶部 使用js实现移动设备访问跳转到指定目录 从一幅图中了解开源世界 Jquery ajax 学习笔记 工欲善其事必先利其器系列之:在VS里面折叠js代码
Cron表达式简明教程
陈大欠 · 2024-05-29 · via 博客园 - 陈大欠

Cron表达式简明教程

Cron表达式的起源可以追溯到1970年代早期的UNIX系统。以下是关于Cron表达式起源的详细介绍:

起源

  1. 时间背景:Cron表达式最初是在1970年代早期的UNIX系统中创建的。
  2. 设计者:虽然Cron表达式的具体设计者没有明确的记录,但它与UNIX系统的整体设计和开发密切相关。UNIX系统是由贝尔实验室的Ken Thompson、Dennis Ritchie等人开发的,而Cron作为UNIX系统的一部分,其设计思想也反映了UNIX系统简洁、灵活和模块化的设计理念。

作用与特点

  1. 目的:Cron表达式的目的是为了在多用户的UNIX环境中,通过预定任务的执行时间来减轻系统资源的压力。它允许用户通过简单的文本文件(通常称为crontab文件)来存储和管理任务的调度信息。
  2. 应用:Cron表达式在计算机操作系统和应用程序中得到了广泛应用。在操作系统中,它可以用于控制定期执行系统维护任务,如清理日志、备份数据等。在应用程序中,Cron表达式可以用于定时执行一些特定的业务逻辑,如定时发送邮件、生成报告、数据分析等。

格式与语法

Cron表达式通常包含5个或6个时间字段,从左到右分别表示分钟、小时、日期、月份和星期几(可选的秒字段在某些系统中也被支持)。每个字段都可以使用数字、星号、逗号、减号、正斜杠和问号等特殊字符来指定值或范围。

  1. 字段组成

    • 秒(Seconds):0-59的整数,表示秒数。
    • 分钟(Minutes):0-59的整数,表示分钟数。
    • 小时(Hours):0-23的整数,表示小时数(24小时制)。
    • 日期(Day of Month):1-31的整数,表示一个月中的日期。
    • 月份(Month):1-12的整数,或者使用月份的英文缩写(如JAN、FEB等)。
    • 星期(Day of Week):0-7的整数,其中0和7都表示星期日,或者使用星期的英文缩写(如SUN、MON等)。
    • 年(可选,Year):在某些Cron表达式中,可能包含年份字段,用于指定具体的年份。
  2. 特殊字符

    • *:表示该字段的所有可能值。
    • ,:用于指定多个值。
    • -:用于指定一个范围。
    • /:指定数值的增量。
    • ?:在日期和星期字段中,用于表示不指定值。
    • L:在日期字段中,表示当月的最后一天;在星期字段中,表示某月的最后一个星期X。
    • W:在日期字段中,表示离指定日期最近的工作日(周一至周五)。
    • #:在星期字段中,用于指定一个月的第几个星期X。
  3. 使用示例

    • 每天中午12点执行:0 0 12 * * ?
    • 每周一、三、五的上午10点执行:0 0 10 * * 1,3,5
    • 每月最后一天下午5点执行:0 0 17 L * ?
    • 每月第二个星期日的凌晨1点执行:0 0 1 * * 2#2

Cron表达式在不同的系统和应用中可能有不同的实现和变种,这主要是基于特定系统或应用的需求和特性。以下是一些常见环境中Cron表达式的不同实现和变种:

  1. UNIX Cron(Crontab)
    • 这是最原始的Cron实现,它使用一个简单的文本文件(crontab文件)来定义定时任务。
    • Crontab文件中的每一行代表一个定时任务,其格式包括时间字段(分钟、小时、日期、月份、星期)和要执行的命令或脚本。
    • Cron服务会在指定的时间自动执行这些任务。
┌──────────── [可选] 秒 (0 - 59)
| ┌────────── 分钟 (0 - 59)
| | ┌──────── 小时 (0 - 23)
| | | ┌────── 天数 (1 - 31)
| | | | ┌──── 月份 (1 - 12) OR jan,feb,mar,apr ...
| | | | | ┌── 星期几 (0 - 6, 星期天 = 0) OR sun,mon ...
| | | | | |
* * * * * *
  1. Quartz Scheduler
    • Quartz是一个开源的作业调度库,用于在Java应用程序中进行任务调度。
    • Quartz中的Cron表达式比UNIX Cron更为复杂,因为它支持秒字段,并且提供了更多的选项和灵活性。
    • Quartz的Cron表达式格式通常为:秒 分 时 日 月 周 年(可选)
*    *    *    *    *    *    *
-    -    -    -    -    -    -
|    |    |    |    |    |    |
|    |    |    |    |    |    + year [optional]
|    |    |    |    |    +----- day of week (1 - 7) sun,mon,tue,wed,thu,fri,sat
|    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
|    |    |    +--------------- day of month (1 - 31)
|    |    +-------------------- hour (0 - 23)
|    +------------------------- min (0 - 59)
+------------------------------ second (0 - 59)