Cron表达式详解(转载)
个人博客
字段释义
1 | 0 0/5 * * * ? |
秒 分 时 天(月) 月 天(周) 年份(一般省略)
符号释义
*
:表示所有可能的值
/
:表示数值的增量,简单来说,比如分写上0/5
表示从0分开始,每隔5分钟
?
:仅用在天(月)和天(周),表示不指定值,当其中一个有值时,另外一个需要设为?
字段允许字符
秒: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 秒
分: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 分钟
时: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小时
天(月):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貌似效果相同?)
月: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表示
天(周):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表示周一,以此类推;#后面的数字表示第几个)
年:留空
2020-2099
,
-
*
/
- 2050:表示2050年
- 2020,2030,2040:表示2020年、2030年和2040年
- 2020-2030:表示2020年到2030年
- *:表示所有可能的值
- 2020/10:表示从2020年开始,每隔10年,(就是2020,2030,2040……)
栗子
每隔5分钟执行一次(从0分开始)
1
0 0/5 * * * ?
从0时开始,每小时执行一次
1
0 0 0/1 * * ?
每天的7点30分
1
0 30 7 * * ?
工作日的早上6点30分(即是周一到周五,每天早上的6点30分)
1
0 30 7 ? * MON-FRI
每个月的最后一天早上的10点整
1
0 0 10 L * ?
每个月的最后一个工作日的晚上6点30分(18:30)
1
0 30 18 LW * ?
朝九晚五,每小时
1
0 0 9-17 * * ?
2020年的8月份每个星期六和星期日早上10点28分28秒
1
28 28 10 ? 8 1,7 2020
1,7
中,1表示周日,7表示周六每个月的倒数第二天的早上8点整
1
0 0 8 L-1 * ?
L表示最后一天(倒数第一天),L-1则表示倒数第二天,以此类推
下面是网上一些例子,我直接拿过来了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
要点
- 一般是有6个位置,分别表示 分 秒 时 天(月) 月 天(周) 第7个位置是年,一般省略
- 6个位置中的 天(月) 表示一个月中的第几天,即是几月几号中的几号;天(周) 表示一周中的第几天,周日为第一天,周六为第七天
- **天(月)和天(周)**不能同时指定,其中必定有一个是 ?
- ? 只能用在 天(月)和天(周)
- 2-10:符号 - 表示范围区间
- 2/10:符号 / 表示频率,从2开始,每隔10,即2,12,22……类推
- 2,10:符号 , 表示和,
2,10
表示2和10 - L:last的缩写,表示最后,只能用在天(月)和天(周),一般和数字搭配使用,如L在天(月)中表示一个月中的最后一天,L-1则表示每个月的倒数第二天;3L在天(周)中则表示最后一个星期二
小结
- 之前也接触过cron,不过上网上找到想要的效果之后便没有继续深究,现在想改个需求又得重蹈覆辙,所以便记录一下,参考过许多博客,理解之后才写下此文,或许有疏漏之处,欢迎指正!
- 理解之后,就很容易写的出来,还是要靠理解
- 附上一个在线Cron表达式生成器,网上找的:http://qqe2.com/dev/cron
题外知识
月份的英语单词:
1 | 一月:January; |
星期拼写
1 | 星期一:Monday,读音['mʌndi, 'mʌndei],英文缩写Mon。 |
星期一到星期日的英文由来
1 | 星期一到星期日的英文由来 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 赵晓斌技术博客!
评论