1. 程式人生 > >Cron表示式語法及注意

Cron表示式語法及注意

轉自:https://blog.csdn.net/wangjunjun2008/article/details/49980151

 

Cron表示式的格式由7部分構成,各個部分之間用空格隔開,其中第7個部分為可選部分。格式如下:

 

* * * * * * *

 

各個部分表示的意義如下:

第一部分:秒(0~59)

第二部分:分(0~59)

第三部分:小時(0~23)

第四部分:月中的日期(1~31)

第五部分:月份(1~12或JAN~DEC)

第六部分:每週的周幾(1~7或SUN~SAT)

第七部分:年份(1970~2099)【可選】

 

 

每個部分所能使用的所有符號如下:

*:匹配該域的任意值;如*用在分所在的域,表示每分鐘都會觸發事件;
?:匹配該域的任意值;
-:匹配一個特定的範圍值;如時所在的域的值是10-12,表示10、11、12點的時候會觸發事件;
,:匹配多個指定的值;如周所在的域的值是2,4,6,表示在週一、週三、週五就會觸發事件(1表示週日,2表示週一,3表示週二,以此類推,7表示週六);

/:左邊是開始觸發時間,右邊是間隔的時間;如秒所在的域的值是5/15,表示5秒、20秒(隔15秒)、35秒(隔15秒)、50秒(隔15秒)時都觸發一次事件;
L:最後(last),表示該域的最後一個值;如果是用在天這個域,表示月的最後一天;如果是用在周所在的域,如6L,表示某個月最後一個週五。
W:工作日(weekday);如天所在的域的值是15W,表示本月15日最近的工作日;如果15日是週六,觸發器將觸發上14日週五;如果15日是週日,觸發器將觸發16日週一;如果15日不是週六或週日,而是週一至週五的某一個,那麼它就在15日當天觸發事件;

#:用來指定每個月的第幾個星期幾;如6#3表示某個月的第三個星期五;

 

 

【* 與 ? 的區別】

* 可以用在所有的部分中;

? 只能用在第四部分(月中的日期)與第六部分(每週的周幾)這兩個部分中。

因為 第四部分(月中的日期)與第六部分(每週的周幾)這兩個域的值是互斥的,因此需要通過設定一個問號(?)來表明不想設定的那個欄位。

例如:設定每月的20日觸發排程,不管20日到底是星期幾,則只能使用如下寫法:

1 1 1 20 * ?

其中最後一位只能用?,而不能使用*,如果使用*表示不管星期幾都會觸發,實際上並不是這樣!!!

 

 

實用的Cron表示式例子:

Cron表示式

表示的含義

0 0 12 * * ? 每天12:00觸發事件
0 15 10 ? * * 每天10:15觸發事件
0 15 10 * * ? 每天10:15觸發事件
0 15 10 * * ? * 每天10:15觸發事件
0 15 10 * * ? 2005 2005年的每天10:15觸發事件
0 * 14 * * ? 每天14點開始觸發,每分鐘觸發一次,14:59分結束
0 0/5 14 * * ? 每天14點開始觸發到14:59分結束的每5分鐘觸發一次事件
0 0/5 14,18 * * ? 每天14點開始到14:59期間和18點到18:59期間的每5分鐘觸發一次事件
0 0-5 14 * * ? 每天14點到14:05期間的每1分鐘觸發一次事件
0 10,44 14 ? 3 WED 每年3月的星期三的14:10和14: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觸發一次事件