Cron表示式
1、語法格式
-
6個域
-
7個域:second(秒)minute(分)hour(時)day(日)month(月)week(周)year(年)
2、各欄位含義
位置 | 域名 | 是否必填 | 允許值 | 允許的特殊字元 |
---|---|---|---|---|
1 | 秒 | 是 | 0-59 | , - * / |
2 | 分 | 是 | 0-59 | , - * / |
3 | 時 | 是 | 0-23 | , - * / |
4 | 日 | 是 | 1-31 | - * ? / L W |
5 | 月 | 是 | 1-12 or JAN-DEC | , - * / |
6 | 周 | 是 | 1-7 or SUN-SAT(1代表週日,7代表週六) | , - * ? / L # |
7 | 年 | 否 | empty 或 1970-2099 | , - * / |
注:由於"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中一個設定萬用字元"?".
3、萬用字元含義
符號 | 意義 | 舉例/說明 |
---|---|---|
? | 無意義值,相當於佔位符 | 只在周 和日 中使用 |
* | 可用於所有時間域,表示該時間域的每一個時刻 | cron="8 20 12 * 4 ?" =4月份每天中午12點20分8秒 |
, | 多值連線 | 如在小時域上設定“7,9”,表示在7點和9點均觸發 |
- | 區間 | 如在小時域設定“7-9”,表示在7,8,9點均進行觸發 |
/ | 間隔,表達一個等步長序列,x為起始值,y為增量步長值 | cron="2 59 0/25 13 * 2 ?" 2月份每天的"13:00:02",13:25:02,13:50:02 |
L | 該字元只在日期域 和星期域 中使用,代表Last 的意思,但它在兩個域中的意義不同 |
日 :當前月份的最後一天,如1月31日,非閏年2月28日; 周 :表示星期六,同等於7。但如果出現在星期域中,而且在前面還有一個數值X,則表示“這個月的最後一個”,例如:5L表示該月的最後一個星期四 |
W | 該字元只能出現在日期域 中,表示離該日期最近的工作日 |
如12W 表示離該月12號 最近的工作日 ,如果該月的12號 是星期六 ,則匹配11號星期五 ;如果12號 是星期日 ,則匹配13號星期一 ;如果12號 是星期三 ,那結果就是星期三 。但必須注意關聯的匹配日期不能夠跨月 ,如指定1W ,如果1號 是星期六 ,那麼結果就是3號星期一 ,而非上個月的最後的那天。W 只能指定單一日期,而不能指定日期範圍。 |
# | 該字元只能在星期域 中使用,表示當月的第幾個周幾 |
如6#3 ,表示當月的第3個星期五6表示星期五,#3表示當月的第3個 |
4、程式碼示例
(1)秒
cron="8 * * * * ?"
以上表達式含義為:每分鐘的第 8 秒執行。秒後面的時間域是分鐘,*(星號)表示每...
,這裡表示每分鐘
。
注意:是每分鐘的第 8 秒,不是每隔 8 秒
(2)秒+分
cron="8 20 * * * ?"
以上表達式含義為:每小時的第 20 分,第 8 秒執行 。分鐘後的時間域是小時,由於是 *(星號),所以代表每小時。
(3)秒+分+ 時
cron="8 20 12 * * ?"
以上表達式含義為:每天中午 12 點 20 分 8 秒執行。小時後的時間域是天,*(星號)表示每天。
注意:時間的範圍是 0-23,即 24 時制。所以 12 表示中午 12 點,如果表示午夜 12 點,表示式應該為:cron=8 20 0 * * ?
(4)秒+分+小時+日
cron="8 20 12 31 * ?"
以上表達式含義為:每個月的 31 號中午 12 點 20 分 8 秒執行。
注意:
1、
如果某個月份中不包含 31 號,則不執行;
2、如果表示式為 cron="8 20 12 31 4 ?",啟動專案時將會報錯: 4 月份沒有 31 號,此表示式永遠都不會執行,所以月份與日要配合使用
(5)秒+分+小時+日+月
cron="8 20 12 30 4 ?"
以上表達式含義為:4 月 30 號中午 12 點 20 分 8 秒執行。
(6)秒+分+小時+日+月+星期
cron="8 20 12 30 4 3"
星期域具有特殊性
,它由 1-7 組成,1 表示星期日(一週的開始),7 表示星期六(一週的最後一天);星期的定義與日和月同時表示,有可能會有衝突。
以上表達式,看著好像是
星期二 4 月 30 號 中午 12 點 20 分 8 秒
這個意思,但實際上並不一定,原因很簡單,你怎麼就知道 4 月 30 號正好是星期二呢?所以這樣定義表示式是存在問題的,也就是說星期
和日
在某種程度上是有衝突
的。所以一般要在星期
和日
之間作出取捨
。即定義了星期,就不定義日;定義了日,就不定義星期。不需要定義的時候使用?佔位,捨棄誰誰就用
cron="8 20 12 ? 4 2"
以上表達式含義為:4 月份的每個星期 1 的中午 12 點 20 分 8 秒