古老的榕树

Go 定时器 cron 表达式的使用

潘军杰 发表于 2018-01-11 00:02 阅读(3395) 评论(0) 赞(1)

上次在《Go 定时器 cron 的使用》里说 cron 简单使用方法,如果想更灵活的使用定时,可能会涉及到更复杂的六位表达式的使用方法,如每半小时执行一次:

0 30 * * * *

六位的表达式看起来,有点费解,好比正则表达式一样,我们需要按步骤来理解;

理解六个作用域的意义

    0 0 0 1 1 *
    0 0 0 1 * *
    0 0 0 * * 0
    0 0 0 * * *
    0 0 * * * *

如上表达式,都是六位占位符,可以是数字和字符,其中字符是特定字符包括:【* / , - ? JAN-DEC SUN-SAT】

我们叫它为六个作用域吧,从左到右的顺序,代表的含义是 秒钟域(1) 分钟域(2) 小时域(3) 日期域(4) 月份域(5) 星期域(6)

月份域可以使用 JAN-DEC 和星期域可以使用SUN-SAT,分别表示 1-12月的英文缩写和星期一至星期日的英文简写,如果不了解月份和星期英文简写,建议使用数字表示,因为这个需要记忆和大小写敏感的,容易出错。

下面列出方便理解:

1至12月份的英文简写:Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec

星期一至星期日的英文简写:Mon Tues Wed Thurs Fri Sat Sun

六个作用域还可以使用的特定字符:

特定字符星号( *)

星号表示匹配所有合理的值,可以存在任何域。比如第月份域(5)的位置使用星号*,表示每个月都执行;同理在星期域(6)的位置使用星号,表示每个星期都执行;其他占位使用它以此类推。

特定字符斜划线 (/)

斜划线通常用于一个范围增量,可以存在任何域。比如在分钟域(2)的位置使用 3-59/15 表示一个小时的第3分钟到59分钟时间范围内,每15分钟执行一次。

特定字符逗号 (,)

逗号用于分隔多个点,可以存在任何域。比如在星期域(6)的位置使用 MON,WED,FRI 表示星期一、星期三、星期五这三个点都满足条件。

特定字符中横杠 (-)

中横杠通常用于定义范围,可以存在任何域。 例如小时域(3)的位置使用 9-17 表示起始9点到截止17点这个时间段范围。

特定字符问号 (?)

问号表示不确定一个点的意思,只能在日期域(4) 星期域(6)的位置使用,表示指定的值不确定性,一个表达式中只能用一次问号?,如果在日期域(4)使用了,就不能再星期域(6)上用了。它和星号是有区别的,星号表示匹配所有点,就是说一个月哪一天,哪个星期都可以,而问号,表示一个月的不确定哪一天或是一周不确定哪一天都行,这个是很难理解的,需要说一些具体的情况来解释,比如2月的第18天,刚好是第三周的第2天,那么如果在日期域(4)定义18,星期域(6)定义2这样就重叠定义了,这个 cron 是不允许的。

标签: Go 作业 定时器
0 条网友评论

哇~~~ 竟然还没有评论!

称呼*
邮箱*
内容*
验证码*
验证码 看不清换张