CRON基础学习

举报
object 发表于 2024/03/07 11:56:42 2024/03/07
【摘要】 cron表达式,再编程做定时任务的时候,经常会用到,具有很强的通用性,很多定制化的工具,也是支持自定义表达式。可能是定时器写得少,或者没有主动去了解,所以很多时候知道有这个东西,但是没去认真看那一下,适逢工作中需要用到,决定认真看一下,这一下,瞬间感觉其实真的很简单(大多数时候使用),果然还是要有一颗学习的心,不能老是百度,这里的百度指的是直接去搜答案。不过也有可能初入这个行业,当时确实看得...

cron表达式,再编程做定时任务的时候,经常会用到,具有很强的通用性,很多定制化的工具,也是支持自定义表达式。可能是定时器写得少,或者没有主动去了解,所以很多时候知道有这个东西,但是没去认真看那一下,适逢工作中需要用到,决定认真看一下,这一下,瞬间感觉其实真的很简单(大多数时候使用),果然还是要有一颗学习的心,不能老是百度,这里的百度指的是直接去搜答案。不过也有可能初入这个行业,当时确实看得头皮发麻,现在很多东西就了解了,自然觉得简单了, 所以初入计算机行业也可以后面再看,估计一下子就会了。

ok,学习cron一共只需要学习一张表,只要看懂了这张表,真的就很简单了,虽然看起来很多,实际需要记的内容很少。

字段名

字段解释

值范围

特殊字符

Seconds


0~59

, - * /

Minutes


0~59

, - * /

Hours

小时

0~23

, - * /

Day-of-Month


1~31

, - * ? / L W C

Month


0~11或JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV,DEC

, - * /

Day-of-Week


1~7,1=SUN 或者"SUN, MON, TUE, WED, THU, FRI, SAT”

, - * ? / L C #

Year (可选)


empty或1970~2099

, - * /

举例:  1 * * * *  ? *: 从左到右,依次表示是从秒到年。  表示每分钟的第一秒执行。   最后一个* 表示年, 可以省略。   所以 常见的cron表达式  只有6个值

上述表基本就是所有的cron内容了,再稍加解释,基本就学完了,亏我以前觉得很难,果然还是态度不够

特殊字符解释:  

  • ,  -这两个不需要解释,就是具体的点 或者 范围。这个真不解释, 例如五点和六点  就5,6    五点到六点 5-6
  • * 这个最常见, 简单理解就是0-24,表示无时无刻。 就是所有时刻都生效, 主要是配合其他具体值使用的。  例如你要每小时第五分钟执行, 则小时就应该 * ,表示每小时。  个人理解,这里需要注意的是,一般从小到大,也就是cron从左到右,一般有具体的时间点 左边都是具体时间 而右边是*  。   例如 1 1 * * * ?表示每小时第1分钟第一秒执行。  左边是具体值右边是*
  • / 这个就更简单了,就表示从几点开始每隔多久,/前面表示 具体开始时间, 后面表示具体的间隔。  例如1/2  ,在时上,就表示, 一点开始,每隔两小时执行。其他同理
  • ? 只能用在天月和天周上,这个也是最开始让我感觉难的地方,简单理解就是放弃这个值的设置。   就是天月和天周容易冲突。  所以天月设置了值的时候,天周就?  一般天周用?比较多。
  • L 最后 最后  2L在天月上表示,倒数第二日。   2L在天周上 表示 每个月最后一个周一。           === 不常用
  • W 用在天月上,就是工作日,即周一到周五。5W,五号且是工作日, 如果五号不是工作日,则就近在当月范围内寻找工作日。     ===不常用 
  • # 用在天周上, 这个可以理解为补充。 因为天周的号数表达周几,无法表达第几周, 6#3表达每月第三个周五。#前表示周几 #后表示第几周         ===不常用
  • C  // todo这个不知道, 不过不重要,大多数用不上,  后续了解了我再补充上。

以上基本上就完了,看起来很多, 实际只需要关注 , -  / ? 这几个特殊字符就够了,基本上大多数的时候就足够用了。

列举几个简单的题目吧,答案在后面

1.每个月18到20号的11点和17点

2.每天奇数小时整

3.每个月最后一天


就这些吧, 本来就是普通的入手。 大多数时候够用就行,答案 ↓↓↓

1.每个月18到20号的11点和17点

对于新手,再次强调一个概念: 从左到右依次是从秒到天周。  *一般只能出现在右边,  ?一般在最后

解析:每个月18-20, 这里是范围 需要用到-  。  11点和17点,这里是两个具体时间,需要用到“,”。   需要注意11点和17点默认是有0分0秒的意思, 左边一般是具体的值,不存在*号。  因为指定了天月,所以天周使用?

答案:0 0 11,17 18-20 * ?

2.每天奇数小时整

解析:这个就需要翻译一下,大概意思就是每天的奇数时刻整执行,例如1点 3点。 所以这里就是用了每隔2小时的概念, 需要用到/  。 起始时间就是1点,间隔是2小时

答案:0 0 1/3 * * ?

3.每个月最后一天

解析:最后就是L,  L左边跟几就是最后第几天, 最后一天, 1L, 1省略

答案:0 0 0 L * ?

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。