Cron表达式示例

1. 概述

1.1 應用場景

當我們設定更新頻率比較複雜,無法透過「簡單重複執行」或「明細頻率設定」直接設定時,我們可以透過 Cron 運算式實現。

本文將以範例介紹如何設定 Cron 運算式。

1.2 功能介紹

Cron運算式為一個字串,由 5 個或 6 個空格隔開,分為 6 或 7 個域,每一個域代表一個時間範圍。Cron有如下兩種文法格式: 

  • Seconds Minutes Hours DayofMonth Month DayofWeek Year。

  • Seconds Minutes Hours DayofMonth Month DayofWeek。

從左到右(用空格隔開):秒 分 小時 月份中的日期 月份 星期中的日期 年份(可選)。

注:使用者可參考 Cron 運算式線上生成工具 檢查寫的運算式是否正確,確定正確以後填入。 

2. Cron表達式規則

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

允許值  允許的特殊字元
  秒(Seconds)  0~59的整數  , - * /    四個字元
  分(Minutes)  0-59的整數  , - * /    四個字元
  小時(Hours)  0-23的整數  , - * /    四個字元
  日期(DayofMonth)  0-31的整數(但是需要考慮月的天數)  ,- * ? / L W C     八個字元
  月份(Month)  1-12的整數或英文JAN-DEC  , - * /    四個字元
  星期(DayofWeek)  1-7的整數或英文SUN-SAT(1=SUN, 2=MON,...)  , - * ? / L C #     八個字元
  年份(Year)  1970-2099 , - * /    四個字元

每一個域除了使用數字還可以出現特殊字元,其中特殊字元的含義如下: 

字元
含義
表示匹配該域的任意值,假如在 Minutes 域使用 *,即表示每分鐘都會觸發事件
?只能用在 DayofMonth(日期)和 DayofWeek(星期)兩個域。它也匹配域的任意值,但實際不會。因為 DayofMonth 和 DayofWeek 會相互影響。例如想在每月的 20 日觸發調度,不管 20 日到底是星期幾,則只能使用如下寫法: 13 13 15 20 * ?,其中最後一位只能用 ?,而不能使用 *,如果使用 * 表示不管星期幾都會觸發,實際上並不是這樣
-表示範圍,例如在 Minutes 域使用 5-20,表示從 5 分到 20 分鐘每分鐘觸發一次
表示起始時間開始觸發,然後每隔固定時間觸發一次,例如在Minutes域使用 5/20,則意味着 5 分鐘觸發一次,而 25,45等分別觸發一次
,表示列出枚舉值。例如:在Minutes域使用 5,20,則意味着在 5 和 20 分每分鐘觸發一次
L該字元只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Last”的意思,但它在兩個欄位中意思不同。L在日期欄位中,表示這個月份的最後一天,如一月的 31 號,非閏年二月的 28 號;如果L用在星期中,則表示星期六,等同於7。但是,如果 L 在前面有一個數值 X ,它就具有其他含義了。例如,月份中的 6L 表示該月的倒數第六天;星期域中的 FRIL 表示這個月的最後一個星期五
W該字元只能出現在 DayofMonth(日期)域裏,是對前導日期的修飾,表示離該日期最近的工作日(週一到週五)。例如 15W 表示離該月15 號最近的工作日(週一到週五),如果該月15 號是星期六,則匹配 14 號星期五;如果15 日是星期日,則匹配 16 號星期一;如果 15 號是星期二,那結果就是15 號星期二。但必須注意聯動的匹配日期不能夠跨月,如你指定 1W,如果 1 號是星期六,結果匹配的是 3 號星期一,而非上個月最後的那天。W 字串只能指定單一日期,而不能指定日期範圍
LW在 DayofMonth 欄位可以組合使用 LW,它的意思是當月的最後一個工作日(週一到週五)。
C該字元只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Calendar”的意思。它的意思是計劃所聯動的日期,如果日期沒有被聯動,則相當於日曆中所有日期。例如:5C 在日期欄位中就相當於日曆 5 日以後的第一天;1C 在星期欄位中相當於星期日後的第一天
#該字元只能在 DayofWeek(星期)域中使用,表示當月某個工作日(週一到週五)。如 6#3 表示當月的第三個星期五( 6 表示星期五,#3表示當前的第三個);而 4#5 表示當月的第五個星期三,假設當月沒有第五個星期三,忽略不觸發

3. 示例

例如:我們想要使用實現「部門資料」資料夾,每週一到週五早上 8 點更新。

1)對資料夾「部門資料」設定定時更新,如下圖所示:

2)在定時更新的編輯介面中,設定執行頻率為「運算式設定」,輸入對應的 Cron 運算式。

該運算式表示,每週一到週五,上午八點都執行一次更新。

3)點選確定後,即設定成功。

這裏我們可以拓展一下:

運算式
含義
0 0 8 ? * 2-6每週一到週五,上午 8 點執行一次
0 0/5 8-9 ? * 2-6每週一到週五的上午 8 點到 9 點期間,每隔 5 分鐘執行一次
0 0 8,17 ? * 2-6每週一到週五的 8 點和 17 點,執行一次

3.1 更多示例參考

常見場景
0 0 8,13 * * ?每天的早8、下午1點觸發一次
0 0 8-18 ? * MON-FRI每週一到週五的 8-18 點(即一般的工作時間),每整點觸發一次
0 0 12 ? * 2#1每月第一個星期一中午12點觸發一次
0 * 14 * * ?每天從下午 2 點開始到 2 點 59 分每分鐘一次觸發
0 0/5 14 * * ?每天從下午 2 點開始到 2 點 55 分結束每 5 分鐘一次觸發
0 55/10 14,18 * * ?每天的下午 2 點 55 和 6 點 55 分觸發
0 10,44 14 ? 3 WED三月的每週三的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-20052002 年至 2005 年的每月最後一個週五的 10:15觸發
0 15 10 ? * 6#3每月的第三個週五的 10:15 觸發
0 0 0 L-2 * ? *每月倒數第二天(支援 FineReport 10.0,不支援 FineReport 9.0)
簡單場景
*/5 * * * * ?每隔 5 秒執行一次
0 */1 * * * ?每隔 1 分鐘執行一次
0 0 */1 * * ?每隔 1 小時執行一次
0 0 12 * * ?每天 12 點執行一次
0 0 0,13,18,21 * * ?每天的 0 點、13 點、18 點、21 點都觸發一次
0 0 0-8 * * ? 每天的 0-8點,每整點觸發一次
0 15 10 ? * *每天早上 10:15 觸發
0 15 10 * * ?每天早上 10:15 觸發
0 15 10 * * ? *每天早上 10:15 觸發
0 15 10 * * ? 20242024 年的 每天早上 10:15 觸發



附件列表


主题: 資料準備
已经是第一篇
已经是最后一篇
  • 有帮助
  • 没帮助
  • 只是浏览
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙