Cron表达式

1 篇文章 0 订阅
1 篇文章 0 订阅

1.Cron 表达式 (Spring Schedule) Author: Arjen Poutsma

   ┌───────────── second (0-59)
   │ ┌───────────── minute (0 - 59)
   │ │ ┌───────────── hour (0 - 23)
   │ │ │ ┌───────────── day of the month (1 - 31)
   │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
   │ │ │ │ │ ┌───────────── day of the week (0 - 7)
   │ │ │ │ │ │          (0 or 7 is Sunday, or MON-SUN)
   │ │ │ │ │ │
   * * * * * *

适用规则:

  • 一个字段可以是 星号( * ),它总是代表 “first-last”(所有值)。对于 “day of month”(月的多少号) 或 “day of week”(星期几) 字段,可以使用问号 ? 而不是星号。

  • 数字的范围由两个用 连字符( - ) 分隔的数字表示。指定包含的范围。

  • 范围(或 * ) 后面加上 /n ,表示间隔,(在该范围内 指定数字的值 的 间隔)。

  • month”和“day of week”字段可以使用对应的英文名称。使用特定日期或月份的前三个字母(大小写无关紧要)。如 JAN,MON

  • day of month”和“day of week”字段可以包含一个 L 字符,代表“ last ”,在每个字段中有不同的含义:

    • 在“day of month”字段中,L 代表“ 这个月的最后一天 ”。如果后面跟着一个 负偏移量 (即 L-n ),则表示“ 从一个月的第n天到最后一天 ”。如果后面跟着 W (即 LW ),则表示“ 这个月的最后一个工作日 ”。
    • 在“ day of week ”字段中,L 代表“ 一周的最后一天 ”。如果 前缀是数字或三个字母 ( 如 dLDDDL ),则表示“ 该月d周(或DDD)的最后一天 ”( DDD为英文名称的前三个字母 )。
  • " day of month "字段可以是 nW ,表示 “ the nearest weekday to day of the month n ”(月中最近的工作日n ),如果 nW的结果落在 周六,那么nW的结果应是 这个周六前的周五。如果nW的结果落在 周日,那么nW的结果应是 这个周日后的周一(即下周一),如果n是1,落在周六也会发生这种情况(即 1W 表示“ the first weekday of the month ” )。

  • day of week ”字段可以是 d#n (或 DDD#n ),表示 “ the n-th day of week d (or DDD) in the month ”( 一个月中d周(或DDD)的第n天 )。

示例表达式:

  • " 0 0 * * * * " = the top of every hour of every day.

    每天的每一个小时

  • " */10 * * * * * " = every ten seconds.

    每隔10秒

  • " 0 0 8-10 * * * " = 8, 9 and 10 o’clock of every day.

    每天的 8,9,10 整点

  • " 0 0 6,19 * * * " = 6:00 AM and 7:00 PM every day.

    每天的 上午6点 和 下午7点

  • " 0 0/30 8-10 * * * " = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.

    每天的8点到10点间,每隔30分钟 (即 每天的8:00, 830, 9:00, 9:30, 10:00 10:30)

  • " 0 0 9-17 * * MON-FRI " = on the hour nine-to-five weekdays

    在工作日(周一到周五)早9点到晚5点的时间

  • " 0 0 0 25 12 ? " = every Christmas Day at midnight

    每个圣诞节的午夜

  • " 0 0 0 L * * " = last day of the month at midnight

    这个月的最后一天午夜

  • " 0 0 0 L-3 * * " = third-to-last day of the month at midnight

    这个月倒数第三天的午夜

  • " 0 0 0 1W * * " = first weekday of the month at midnight

    这个月的第一个工作日午夜

  • " 0 0 0 LW * * " = last weekday of the month at midnight

    这个月最后一个工作日的午夜

  • " 0 0 0 * * 5L " = last Friday of the month at midnight

    这个月最后一个星期五的午夜

  • " 0 0 0 * * THUL " = last Thursday of the month at midnight

    这个月最后一个星期四的午夜

  • " 0 0 0 ? * 5#2 " = the second Friday in the month at midnight

    这个月第二个星期五的午夜

  • " 0 0 0 ? * MON#1 " = the first Monday in the month at midnight

    这个月的第一个星期一午夜

还支持以下宏命令

  • @year ”(或“ @annual ”)每年运行一次,即" 0 0 0 1 1 * "
  • " @month "每月运行一次,即“ 0 0 0 1 * *
  • @weekly ”每周运行一次,即“ 0 0 0 * * 0
  • @daily ”(或“ @midnight ”)每天运行一次,即:“ 0 0 0 * * *
  • @hour ”每小时运行一次,即:" 0 0 * * * * "

2. Cron表达式(AWS Cron Expressions)

Cron表达式有六个必需的字段,它们之间用空格分隔。

语法:cron(fileds)
注:AWS的Cron表达式与Spring Schedule的略有不同,没有 second 部分,但是有 year 。

   ┌───────────── minute (0 - 59)
   │ ┌───────────── hour (0 - 23)
   │ │ ┌───────────── day of the month (1 - 31)
   │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
   │ │ │ │ ┌───────────── day of the week (1 - 7) ,( 1 is Sunday, or SUN-SAT )
   │ │ │ │ │ ┌───────────── year (1970 - 2199)
   │ │ │ │ │ │         
   │ │ │ │ │ │
   * * * * * *

AWS官网中有详细说明:

FieldValuesWildcards(通配符)
Minutes0-59, - * /
Hours0-23, - * /
Day-of-month1-31, - * ? / L W
Month1-12 or JAN-DEC, - * /
Day-of-week1-7 or SUN-SAT, - * ? L #
Year1970-2199, - * /
  • Wildcards(通配符)

    • , (逗号) 通配符表示多个并列的值。如:在 Month 字段中, JAN,FEB,MAR 代表 一月,二月和三月

    • - (破折号) 通配符表示范围。在 Day 字段中,1-15 代表指定月份的 1到15号

    • * (星号) 通配符表示字段的所有值。如:在 Hours 字段中,* 表示每小时。不能同时在 Day-of-month 和 Day-of-week 字段中使用 * 。如果你在其中一个使用了,你必须在另一个字段使用 ?

    • / (斜杠) 通配符表示增量。在 Minutes 字段中,您可以输入 1/10 来指定每10分钟一次,从每小时的第1分钟开始(例如,第11分钟、第21分钟和第31分钟,等等)。

    • ? (问号) 通配符表示 any 。在 Day-of-month 字段中,你可以输入7,如果一周中的任何一天都可以,你可以在 Day-of-week 字段输入?。

    • L 通配符表示 Day-of-month 或 Day-of-week 字段中,月或周的最后一天。

    • W 通配符 在 Day-of-month 字段表示 一个工作日。在 Day-of-month 字段,3W 表示 离一个月的第三天最近的工作日。

    • # 通配符表示在 Day -of-week 字段中 一个月内指定的星期几的某个实例。例如,3#2 将是 这个月的第二个星期二 : 3 指的是星期二,因为它是每周的第三天,而 2 指的是这个月中该类型的第二天。

    如果使用 # 字符,则只能在星期字段中定义一个表达式。例如,3#1,6#3 是无效的,因为它被解释为两个表达式。

  • Limitations(局限性)

    • 不能在 Day-of-month 和 Day-of-week 字段 指定相同的 cron 表达式。如果在其中一个字段中指定一个值或 * (星号),则必须在另一个字段使用 ? (问号)
    • 不支持导致速率快于1分钟的Cron表达式。
  • Examples(示例)

    在创建带有预期时间的规则时,你可以使用下面的样本cron字符串。

    MinutesHoursDay of monthMonthDay of weekYearMeaning
    010**?*Run at 10:00 am (UTC+0) every day
    1512**?*Run at 12:15 pm (UTC+0) every day
    018?*MON-FRI*Run at 6:00 pm (UTC+0) every Monday through Friday
    081*?*Run at 8:00 am (UTC+0) every 1st day of the month
    0/15***?*Run every 15 minutes
    0/10*?*MON-FRI*Run every 10 minutes Monday through Friday
    0/58-17?*MON-FRI*Run every 5 minutes Monday through Friday between 8:00 am and 5:55 pm (UTC+0)
    0/3020-2?*MON-FRI*Run every 30 minutes Monday through Friday between 10:00 pm on the starting day to 2:00 am on the following day (UTC)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值