💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。
- 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老
- 導航
- 檀越劍指大廠系列:全面總結 java 核心技術點,如集合,jvm,并發編程 redis,kafka,Spring,微服務,Netty 等
- 常用開發工具系列:羅列常用的開發工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- 數據庫系列:詳細總結了常用數據庫 mysql 技術點,以及工作中遇到的 mysql 問題等
- 懶人運維系列:總結好用的命令,解放雙手不香嗎?能用一個命令完成絕不用兩個操作
- 數據結構與算法系列:總結數據結構和算法,不同類型針對性訓練,提升編程思維,劍指大廠
非常期待和您一起在這個小小的網絡世界里共同探索、學習和成長。💝💝💝 ?? 歡迎訂閱本專欄 ??
博客目錄
- 一.基本介紹
- 1.什么是 cron?
- 2.cron 格式?
- 3.域標識
- 4.特殊字符
- 5.注意事項
- 二.常用案例
- 1.每分鐘
- 2.指定小時
- 3.日期小時
- 4.月最后一天小時
- 5.周六凌晨 3 點
- 6.指定分鐘
- 7.例子匯總
- 三.細節說明
- 1.秒
- 2.分
- 3.時
- 4.天(月)
- 5.月
- 6.天(周)
- 7.年
一.基本介紹
1.什么是 cron?
Cron(又稱為 cron 表達式或 cron job)是一種在 Unix 和類 Unix 操作系統中用于定期執行任務的時間表達式。Cron 表達式定義了任務應該在何時執行,通常用于自動化系統維護、數據備份、日志輪轉等周期性任務。
Cron 表達式的靈活性使得它成為任務調度和自動化的強大工具,廣泛應用于服務器管理、系統維護以及應用程序的定時任務等場景。在不同的操作系統和編程環境中,cron 的具體實現方式可能會有所不同。
2.cron 格式?
Cron 表達式的格式通常為:
秒(0-59) 分鐘(0-59) 小時(0-23) 日(1-31) 月(1-12) 星期(0-7, 其中0和7表示星期天)[秒] [分] [時] [日] [月] [周] [年]
通常定義 “年” 的部分可以省略,實際常用的由 前六部分組成
其中,星期既可以使用數字(0 表示星期天,1 表示星期一,以此類推),也可以使用縮寫的英文單詞(如 SUN、MON 等)。
3.域標識
域 | 是否必填 | 值以及范圍 | 通配符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
時 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W |
月 | 是 | 1-12 或 JAN-DEC | , - * / |
周 | 是 | 1-7 或 SUN-SAT | , - * ? / L # |
年 | 否 | 1970-2099 | , - * / |
4.特殊字符
此外,還可以使用特殊字符來表示一些特殊的情況,例如:
,
這里指的是在兩個以上的時間點中都執行,如果我們在 “分” 這個域中定義為8,12,35
,則表示分別在第 8 分,第 12 分 第 35 分執行該定時任務。-
這個比較好理解就是指定在某個域的連續范圍,如果我們在 “時” 這個域中定義1-6
,則表示在 1 到 6 點之間每小時都觸發一次,用,
表示1,2,3,4,5,6
*
表示所有值,可解讀為 “每”。 如果在“日”這個域中設置*
,表示每一天都會觸發。?
表示不指定值。使用的場景為不需要關心當前設置這個字段的值。例如:要在每月的 8 號觸發一個操作,但不關心是周幾,我們可以這么設置0 0 0 8 * ?
/
在某個域上周期性觸發,該符號將其所在域中的表達式分為兩個部分,其中第一部分是起始值,除了秒以外都會降低一個單位,比如 在 “秒” 上定義5/10
表示從 第 5 秒開始 每 10 秒執行一次,而在 “分” 上則表示從 第 5 秒開始 每 10 分鐘執行一次。L
表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中設置,表示當月的最后一天(依據當前月份,如果是二月還會依據是否是潤年), 在“周”上表示周六,相當于”7”或”SAT”。如果在”L”前加上數字,則表示該數據的最后一個。例如在“周”上設置”7L”這樣的格式,則表示“本月最后一個周六”W
表示離指定日期的最近那個工作日(周一至周五)觸發,只能在 “日” 中使用且只能用在具體的數字之后。若在“日”上置”15W”,表示離每月 15 號最近的那個工作日觸發。假如 15 號正好是周六,則找最近的周五(14 號)觸發, 如果 15 號是周未,則找最近的下周一(16 號)觸發.如果 15 號正好在工作日(周一至周五),則就在該天觸發。如果是 “1W” 就只能往本月的下一個最近的工作日推不能跨月往上一個月推。#
表示每月的第幾個周幾,只能作用于 “周” 上。例如 ”2#3” 表示在每月的第三個周二。
5.注意事項
- 一般是有 6 個位置,分別表示 分 秒 時 天 (月) 月 天 (周) 第 7 個位置是年,一般省略
- 6 個位置中的 天 (月) 表示一個月中的第幾天,即是幾月幾號中的幾號;天 (周) 表示一周中的第幾天,周日為第一天,周六為第七天
- 天 (月) 和天 (周)不能同時指定,其中必定有一個是 ?
- ? 只能用在 天 (月) **和**天 (周)
- 2-10:符號 - 表示范圍區間
- 2/10:符號 / 表示頻率,從 2 開始,每隔 10,即 2,12,22… 類推
- 2,10:符號 , 表示和,
2,10
表示 2 和 10 - L:last 的縮寫,表示最后,只能用在天 (月) 和天 (周),一般和數字搭配使用,如 L 在天 (月) 中表示一個月中的最后一天,L-1 則表示每個月的倒數第二天;3L 在天 (周) 中則表示最后一個星期二
二.常用案例
1.每分鐘
每隔1分鐘執行一次:0 */1 * * * ?
2.指定小時
每天22點執行一次:0 0 22 * * ?
3.日期小時
每月1號凌晨1點執行一次:0 0 1 1 * ?
4.月最后一天小時
每月最后一天23點執行一次:0 0 23 L * ?
5.周六凌晨 3 點
每周周六凌晨3點實行一次:0 0 3 ? * L
6.指定分鐘
在24分、30分執行一次:0 24,30 * * * ?
7.例子匯總
- 每隔 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
- 每個月的倒數第二天的早上 8 點整
0 0 8 L-1 * ?
- L 表示最后一天(倒數第一天),L-1 則表示倒數第二天,以此類推
三.細節說明
1.秒
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 秒
2.分
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 分鐘
3.時
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 小時
4.天(月)
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 貌似效果相同?)
5.月
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 表示
6.天(周)
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 表示周一,以此類推;# 后面的數字表示第幾個)
7.年
留空
2020-2099
,
-
*
/
- 2050:表示 2050 年
- 2020,2030,2040:表示 2020 年、2030 年和 2040 年
- 2020-2030:表示 2020 年到 2030 年
- *:表示所有可能的值
- 2020/10:表示從 2020 年開始,每隔 10 年,(就是 2020,2030,2040…)
覺得有用的話點個贊
👍🏻
唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評論批評指正!😄😄😄💘💘💘如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!🌙🌙🌙