【Java基礎系列】Cron表達式入門

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。
img

  • 推薦: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 道阻且長,行則將至,讓我們一起加油吧!🌙🌙🌙

img

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

優秀案例 | 元宇宙雙語財經科技主播“舒望”主持首屆粵港澳大灣區元宇宙國際傳播論壇

12月6日,由南方財經全媒體集團指導、大灣區元宇宙國際傳播實驗室(GBA MIC Lab)主辦、南財國際傳播中心和21世紀經濟報道共同承辦,以“多元共創開放共享”為主題的首屆粵港澳大灣區元宇宙國際傳播論壇在廣州隆重開幕。 “立足灣區,…

Kubernetes - 為什么 K8S 在容器里不能調用自己?

問題描述 最近遇到一個神奇的現象,在 K8S 的 POD 容器中,比如 pod name:mini-appnamespace:devport:5050 那么,是無法在 mini-app 容器里執行以下命令,如果執行,會一直卡在這條命…

一文詳解Java單元測試Junit

文章目錄 概述、Junit框架快速入門單元測試概述main方法測試的問題junit單元測試框架優點:使用步驟: 使用案例包結構 Junit框架的常見注解測試 概述、Junit框架快速入門 單元測試概述 就是針對最小的功能單元(方法),…

ROS rosbag

在ROS中的rosbag是一個命令行工具,主要用于記錄、回放和分析rostopic中的數據。它可以將指定rostopic中的數據記錄到.bag后綴的數據包中,以便于進行離線分析和處理。 在ROS系統中,rosbag可以通過命令行工具或ROS節點來使用。 通過rosbag命令…

數字圖像處理(實踐篇)十九 漫水填充

目錄 一 漫水填充算法--FloodFill 二 涉及的函數 三 實踐 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是選中與種子點相連接的區域,利用指定顏色進行區域顏色填充。可以通過設置連通方式或像素的范圍控制填充的效果。通常是用來標記或者分離圖像的一部…

進程地址空間

引入地址空間 靜態變量和棧空間變量 靜態變量默認是被初始化的 存放在初始化和為初始化空間中 static已經變成了全局變量 命令行參數和環境變量的增長方向 這里觀察的是命令行參數和環境變量的地址 觀察命令行和環境變量表的地址 進程地址空間 如果他們是同一塊兒空間&am…

Ubuntu22.04 交叉編譯fdk-aac for Rv1106

一、下載fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、編譯 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

軟件測試——集成測試

集成測試是在單元測試之后,將各個獨立單元(通常是已經通過單元測試的模塊或組件)組合在一起,測試它們在一起協同工作的過程。以下是進行集成測試的一般步驟和最佳實踐: 1. 明確定義集成測試的目標 確定集成測試的目標…

麒麟v10 數據盤初始化 gpt分區

麒麟v10 數據盤初始化 gpt分區 1、查看磁盤 lsblk2 、分區 parted2.1、 設置磁盤分區形式2.2、 設置磁盤的計量單位為磁柱2.3、 分區2.4、 查看分區 3、分區格式化4、 掛載磁盤4.1、新建掛載目錄4.2、掛載磁盤4.3、查看掛載結果 5、設置開機自動掛載磁盤分區5.1、 查詢磁盤分區…

ClamAV開源病毒庫使用例子

ClamAV是一個開源的反病毒引擎,用于檢測惡意軟件和病毒。ClamAV提供了一個名為cl_scanfile的函數,用于掃描單個文件是否包含病毒。以下是一個使用cl_scanfile函數的示例代碼: 首先,確保已經安裝了ClamAV庫。在Debian/Ubuntu系統中…

用AI來糾正錯別字和修飾文字

▲ 搜索“大龍談智能內容”關注GongZongHao▲ 在使用谷歌翻譯或百度翻譯將英語翻譯成中文時,有些句子讀起來不太流暢。我嘗試使用AI來幫助我修改翻譯后的中文,希望能讓句子更符合中文習慣。 使用百度文心一言嘗試一下。 文心一言的鏈接是這個&#x…

VUE3給table的head添加popover篩選、時間去除時分秒、字符串替換某字符

1. VUE3給table的head添加popover篩選 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墻服務配置

從 RHEL/CentOS 7開始&#xff0c;使用新的防火墻服務——firewalld。這里介紹該防火墻服務的基本用法 一、防火墻服務管理&#xff1a;從 RHEL/CentOS 7開始采用Systemd作為新的系統管理器&#xff0c;而systemctl則是Systemd中用于管理服務的命令 # 啟動防火墻服務 systemct…

谷歌Gemini剛發就惹質疑:測試標準有失偏頗,效果視頻疑似剪輯

夢晨 克雷西 發自 凹非寺 量子位 | 公眾號 QbitAI 谷歌憋了許久的大招&#xff0c;雙子座Gemini大模型終于發布&#xff01;其中一圖一視頻最引人注目&#xff1a; 一圖&#xff0c;MMLU多任務語言理解數據集測試&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

OpenGL學習資料

1.學習網站 Song Ho Ahn LearnOpenGL GAMES101:現代計算機圖形學入門 OpenGL 官網 2.書籍 Fundamentals of computer graphics OpenGL ES 3.0編程指南 計算機圖形學(OpenGL版)第3版 3.參考的一些文章 顏色緩沖區 深度緩沖 VBO&#xff0c;VAO和EBO詳解 深入探索透視投影變…

實戰干貨!基于ERNIE Bot SDK的數字詩人聊天開發教程

隨著人工智能技術的不斷迭代發展&#xff0c;數字人的開發與應用需求也與日俱增&#xff0c;并且隨著大語言模型的發展&#xff0c;數字人也更智能&#xff0c;從最初的語音預制到現在的實時交流&#xff0c;目前已在很多場景都有廣泛應用。 虛擬客服&#xff1a;數字人可以通…

Mysql自動備份腳本(本地備份、遠程備份、刪除冗余備份)

Mysql自動備份腳本&#xff08;本地備份、遠程備份、刪除冗余備份&#xff09; 1. 腳本功能 自動備份mysql數據到服務器上&#xff0c;可以通過linux的 crontab定義備份周期。 自動刪除七天前的備份數據。 2. 腳本內容 #!/bin/bash # auth Eric source /etc/profile # 設…

【EMNLP 2023】基于知識遷移的跨語言機器閱讀理解算法

近日&#xff0c;阿里云人工智能平臺PAI與華南理工大學朱金輝教授團隊、達摩院自然語言處理團隊合作在自然語言處理頂級會議EMNLP2023上發表基于機器翻譯增加的跨語言機器閱讀理解算法X-STA。通過利用一個注意力機制的教師來將源語言的答案轉移到目標語言的答案輸出空間&#x…

計算機網絡高頻面試八股文

目錄&#xff1a; 網絡分層結構三次握手兩次握手可以嗎&#xff1f;四次揮手第四次揮手為什么要等待2MSL&#xff1f;為什么是四次揮手&#xff1f;TCP有哪些特點&#xff1f;說說TCP報文首部有哪些字段&#xff0c;其作用又分別是什么&#xff1f;TCP和UDP的區別&#xff1f;…

套接字應用程序

這章節是關于實現 lib_chan 庫的 。 lib_chan 的代碼在 TCP/IP 之上實現了一個完整的網絡層&#xff0c;能夠提供認證和Erlang 數據流功能。一旦理解了 lib_chan 的原理&#xff0c;就能量身定制我們自己的通信基礎結構&#xff0c;并把它疊加在TCP/IP 之上了。 就lib_chan 本身…