日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定时器 cron 表达式

發布時間:2023/11/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定时器 cron 表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的來說,cron?表達式可以看作是一個有5~7個以空格隔開的的單個字符組成的一組字符串,這5~7個字符就表示了5~7個域,每個域從左到右依次為?秒?分?時?日?月?星期?年?。?cron?表達式在不同的語言中可用的域是不同,下面分別從spring和linux兩個維度進行分析。

Spring 定時器 cron 表達式

Cron有如下兩種語法?
格式:?

Seconds Minutes Hours DayofMonth Month DayofWeek Year 或?
Seconds Minutes Hours DayofMonth Month DayofWeek?

每一個域可出現的字符如下:

代碼
Seconds:可出現,- ?* ?/ 四個字符,有效范圍為0-59的整數 ? ?
Minutes:可出現,- ?* ?/ 四個字符,有效范圍為0-59的整數 ? ?
Hours:可出現,- ?* ?/ 四個字符,有效范圍為0-23的整數 ? ?
DayofMonth:可出現,- ?* ?/ ? L W C八個字符,有效范圍為0-31的整數 ? ??
Month:可出現,- ?* ?/ 四個字符,有效范圍為1-12的整數或JAN-DEc ? ?
DayofWeek:可出現,- ?* ?/ ? L C #四個字符,有效范圍為1-7的整數或SUN-SAT兩個范圍。1表示星期天,2表示星期一, 依次類推 ? ?
Year:可出現,- ?* ?/ 四個字符,有效范圍為1970-2099年 ??
?
每一個域都使用數字,但還可以出現如下特殊字符,它們的含義是:

(1)*:表示匹配該域的任意值,假如在Minutes域使用*,即表示每分鐘都會觸發事件。 ? ?
? ?
(2)?:只能用在DayofMonth和DayofWeek兩個域。它也匹配域的任意值,但實際不會。因為DayofMonth和DayofWeek會相互影響。
例如想在每月的20日觸發調度,不管20日到底是星期幾,則只能使用如下寫法: 13 ?13 15 20 * ?,其中最后一位只能用?,而不能使用*,
如果使用*表示不管星期幾都會觸發,實際上并不是這樣。 ? ?
? ?
(3)-:表示范圍,例如在Minutes域使用5-20,表示從5分到20分鐘每分鐘觸發一次 ? ?
?
(4)/:表示起始時間開始觸發,然后每隔固定時間觸發一次,例如在Minutes域使用5/20,則意味著5分鐘觸發一次,而25,45等分別觸發一次. ? ?
? ?
(5),:表示列出枚舉值值。例如:在Minutes域使用5,20,則意味著在5和20分每分鐘觸發一次。 ? ?
? ?
(6)L:表示最后,只能出現在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味著在最后的一個星期四觸發。 ? ?
? ?
(7)W:表示有效工作日(周一到周五),只能出現在DayofMonth域,系統將在離指定日期的最近的有效工作日觸發事件。
例如:在DayofMonth使用5W,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日觸發;
如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,W的最近尋找不會跨過月份 ? ?

(8)LW:這兩個字符可以連用,表示在某個月最后一個工作日,即最后一個星期五。 ? ?
(9)#:用于確定每個月第幾個星期幾,只能出現在DayofMonth域。例如在4#2,表示某月的第二個星期三。 ??
?
舉幾個例子:

0 0 ?2 ?1 * ?? * ?表示在每月的1日的凌晨2點調度任務 ? ??
0 15 10 ? * ?MON-FRI 表示周一到周五每天上午10:15執行作業 ? ? ? ? ? ??
0 15 10 ? 6L 2002-2006 表示200-2006年的每個月的最后一個星期五上午10:15執行作業 ??

linux 定時器 cron 表達式

在crontab?中的cron?表達式有5個域,從左到右依次為分?時?日?月?星期

完整格式說明如下:

域說明是否必填值范圍允許通配符
一小時中的哪一分鐘0~59,?-?*?/
一天中的什么時間0~23,?-?*?/
一月中的哪一天1~31??-?*?/?L?W
一年中的哪一月1~12/JAN-DEC,?-?*?/
星期一周中的哪一天1~7/SUN-SAT,?-?*?/???L?#

關于通配符的說明:

通配符含義說明
,匹配一個枚舉值的集合表示列出一個枚舉值集合,滿足枚舉值條件的值都會觸發。例如在分域中使用1,2?,則意味著在1和2分鐘的時候分別觸發一次。
-匹配一個范圍表示一個范圍值,滿足在范圍內的值都會觸發。例如在時域中時用0-10,則意味著在0點到10點每個小時都會觸發一次。
*匹配任意值表示匹配域中的任意值。例如在分域中使用*,則意味著任何每一分鐘都滿足觸發條件。
/匹配指定的間隔表示從起始時間開始,每隔指定間隔時間觸發。例如在日域中使用1/3,則意味著,從每月1號開始,每隔3天觸發一次,也可以使用*/3,則意味著每隔3天就會觸發一次。
?忽略該域個人理解為忽略該域。因為在日域和星期域如果同時存在值的話,就會導致兩個域沖突,而達不到想要的觸發效果。例如在日域指定值為2表示在每個月的2號觸發,這個時候星期域就必須使用?通配符,因為如果在星期域再指定一個明確的值的如3的話,就會導致如果2號不是指定星期的第三天,那么就不會觸發,從而就達不到每月2號執行的預期。
Llast,匹配最后一天表示匹配一月或者一個星期的最后一天。例如在月域中使用L,則意味著在每月的最后一天觸發。
Wwork,匹配最近的一個工作日表示匹配指定離指定日期最近的一個工作日。例如在日域中使用5W,則意味著在距離5號,最近的一個工作日觸發。
#匹配第幾個星期幾表示匹配在第幾個星期幾執行。該通配符只能在星期域中使用。例如使用5#2,則意味著在每月的第2個星期5觸發。

舉例:

?實例
?每1分鐘執行一次?*?*?*?*?*?command/1 * * * * command
?每小時的第15,30,45分鐘執行?15,30,45 *?*?*?*?command
?7點到10點的第10,50分鐘執行?10,20 7-50 *?*?*?command
?每隔一天的7點到11點的第20和第40分鐘執行?20,40 7-11?*/1?*?*?command
?每周一的7點到11點的第25和第50分鐘執行25,50 7-11?*?*?1?command
?每天的3:30執行?30?3?*?*?*?command
?每月1、10、20日的3?:?30執行?30 3?1,10,20?*?* command
?每周六、周日的3?:?30執行?30?3?*?*?6,0?command30?3?*?*?6,7?command
?每天9點到16點之間每隔15分鐘執行?/15 9-16 * * * command

總結

以上是生活随笔為你收集整理的定时器 cron 表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。