1. 程式人生 > 其它 >Cron表示式

Cron表示式

1、語法格式

  • 6個域:second(秒)minute(分)hour(時)day(日)month(月)week(周)

  • 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 秒