Cron表達式
字段釋義
0 0/5 * * * ?
秒 分 時 天(月) 月 天(周) 年份(一般省略)
符号釋義
*
:表示所有可能的值
/
:表示數值的增量,簡單來說,比如分寫上
0/5
表示從0分開始,每隔5分鐘
?
:僅用在天(月)和天(周),表示不指定值,當其中一個有值時,另外一個需要設為
?
字段允許字元
秒: 0-59
,
-
*
/
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
,
-
*
/
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
,
-
*
/
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
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
,
-
*
/
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-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
,
-
*
/
留白
2020-2099
,
-
*
/
- 2050:表示2050年
- 2020,2030,2040:表示2020年、2030年和2040年
- 2020-2030:表示2020年到2030年
- *:表示所有可能的值
- 2020/10:表示從2020年開始,每隔10年,(就是2020,2030,2040…)
栗子
- 每隔5分鐘執行一次(從0分開始)
0 0/5 * * * ?
- 從0時開始,每小時執行一次
0 0 0/1 * * ?
- 每天的7點30分
0 30 7 * * ?
- 工作日的早上6點30分(即是周一到周五,每天早上的6點30分)
0 30 7 ? * MON-FRI
- 每個月的最後一天早上的10點整
0 0 10 L * ?
- 每個月的最後一個工作日的晚上6點30分(18:30)
0 30 18 LW * ?
- 朝九晚五,每小時
0 0 9-17 * * ?
- 2020年的8月份每個星期六和星期日早上10點28分28秒
28 28 10 ? 8 1,7 2020
中,1表示周日,7表示周六1,7
- 每個月的倒數第二天的早上8點整
L表示最後一天(倒數第一天),L-1則表示倒數第二天,以此類推0 0 8 L-1 * ?
- 下面是網上一些例子,我直接拿過來了
"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和102,10
- L:last的縮寫,表示最後,隻能用在天(月)和天(周),一般和數字搭配使用,如L在天(月)中表示一個月中的最後一天,L-1則表示每個月的倒數第二天;3L在天(周)中則表示最後一個星期二
小結
- 之前也接觸過cron,不過上網上找到想要的效果之後便沒有繼續深究,現在想改個需求又得重蹈覆轍,是以便記錄一下,參考過許多部落格,了解之後才寫下此文,或許有疏漏之處,歡迎指正!
- 了解之後,就很容易寫的出來,還是要靠了解
- 附上一個線上Cron表達式生成器,網上找的: http://qqe2.com/dev/cron
題外知識
月份的英語單詞:
一月:January;
二月:February;
三月:March;
四月:April;
五月:May;
六月:June;
七月:July;
八月:August;
九月:September;
十月:October;
十一月:November;
十二月:December
星期拼寫
星期一:Monday,讀音['mʌndi, 'mʌndei],英文縮寫Mon。
星期二:Tuesday,讀音['tju:zdi],英文縮寫Tue。
星期三:Wednesday,讀音['wenzdei, 'wenzdi],英文縮寫Wed。
星期四:Thursday,讀音['θə:zdi],英文縮寫Thur。
星期五:Friday,讀音['fraidi],英文縮寫Fri。
星期六:Saturday,讀音['sætədi],英文縮寫Sat。
星期日:Sunday,讀音['sʌndi],英文縮寫Sun。
星期一到星期日的英文由來
星期一到星期日的英文由來
星期一:月亮日。西方人把這天獻給月之女神,因為他們相信月的滿虧會影響農作物的生長。
星期二:戰神日。傳說歐洲戰神Tyr掌管法律和秩序,有次為了制服狼精被咬斷了一隻手,于是以他的名字命名了星期二。
星期三:風神日。西方人為了紀念風暴之神”Woden”,因為他曾上司神族跟巨人族作戰,還犧牲自己銳利的左眼。
星期四:雷神日。這是為了紀念雷神”Thor”,他經常帶着一把大鐵錘,關于雷神Thor的鐵錘還發生過有趣的故事,感興趣的人可以了解一下。
星期五:古英文中Friday意思是Frigg’s day,Frigg是北歐神話中主司婚姻和生育的女神。
星期六:源于羅馬的薩圖恩神,它是掌管五谷的農神。
星期日:太陽日。因為耶稣複活的日子是星期日,是以現在大多數國家都以星期日為假日。