cron表達式詳解

  1. 一個cron表達式最少有5個空格來分割時間元素,總共有7個元素,分別如下:
    ① 秒(0-59)
    ② 分鐘(0-59)
    ③ 小時(0-23)
    ④ 天(月的第幾天)(0-31,但是你需要考慮你月的天數(shù))
    ⑤ 月(0-11)
    ⑥ 天(星期幾)(1-7 1=SUN 或 SUN,MON,TUE,WED,THU,F(xiàn)RI,SAT)
    ⑦ 年份(1970-2099)
    說明:每個元素可以是

    • 一個具體的值(如6)
    • 一個連續(xù)區(qū)間(9-12),
    • 一個間隔時間(0/5)(表示從0開始每隔5,寫到哪個元素就表示間隔的是哪個元素,如果寫到了秒,那么表示從0秒開始,每隔5秒執(zhí)行一次)
    • 一個列表(1,3,5)(表示第1,3,5時間執(zhí)行,也是要根據(jù)寫到了哪個元素上)
    • 通配符(,- * ? / L W #)
  2. 完整格式表格說明

    序號 說明 是否必填 允許填寫的值 允許的通配符
    1 0-59 , - * /
    2 0-59 , - * /
    3 0-23 , - * /
    4 1-31 - * ? / L W
    5 1-12 or JAN-DEC , - * /
    6 1-7 or SUN-SAT , - * ? / L #
    7 empty 或 1970-2099 , - * /

    注意:由于"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中一個設(shè)置通配符"?".

  3. 通配符詳解

    • "*" 字符代表所有可能的值。因此,"*"在子表達式(月)里表示每個月的含義,"*"在子表達式(日)表示每一天,在表達式(周)里表示星期的每一天等等。
    • "/" 字符用來指定數(shù)值的增量,例如:在子表達式(分鐘)里的"0/15"表示從第0分鐘開始,每15分鐘 ;在子表達式(分鐘)里的"3/20"表示從第3分鐘開始,每20分鐘(它和"3,23,43")的含義一樣,例如在周字段上設(shè)置 "MON,WED,FRI" 表示周一,周三和周五觸發(fā)。
    • "?" 字符表示不指定值。使用的場景為不需要關(guān)心當前設(shè)置這個字段的值,僅被用于(日)和(周)兩個子表達式,表示不指定值當2個子表達式其中之一被指定了值以后,為了避免沖突,需要將另一個子表達式的值設(shè)為 "?"。
    • "L" 字符表示最后的意思,僅被用于(日)和(周)兩個子表達式,它是單詞 "last" 的縮寫。在日字段設(shè)置上,表示當月的最后一天(依據(jù)當前月份,如果是二月還會依據(jù)是否是潤年[leap]), 在周字段上表示星期六,相當于"7"或"SAT"。
    • "W" 字符表示離指定日期的最近那個工作日(周一至周五). 例如在日字段上設(shè)置"15W",表示離每月15號最近的那個工作日觸發(fā)。如果15號正好是周六,則找最近的周五(14號)觸發(fā), 如果15號是周未,則找最近的下周一(16號)觸發(fā).如果15號正好在工作日(周一至周五),則就在該天觸發(fā)。如果指定格式為 "1W",它則表示每月1號往后最近的工作日觸發(fā)。如果1號正是周六,則將在3號下周一觸發(fā)。(注,"W"前只能設(shè)置具體的數(shù)字,不允許區(qū)間"-")。
    • "#" 字符表示每月的第幾個周幾,例如在周字段上設(shè)置"6#3"表示在每月的第三個周六.注意如果指定"#5",正好第五周沒有周六,則不會觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過了) 。
      小提示:'L'和 'W'可以一組合使用。如果在日字段上設(shè)置"LW",則表示在本月的最后一個工作日觸發(fā);周字段的設(shè)置,若使用英文字母是不區(qū)分大小寫的,即MON與mon相同;
  4. 常用實例:
    0 0/30 9-17 * * ? ? ? 朝九晚五工作時間內(nèi)每半小時
    0 0 12 ? * WED 表示每個星期三中午12點
    0 0 12 * * ? 每天12點觸發(fā)
    0 15 10 ? * * 每天10點15分觸發(fā)
    0 * 10 * * ? 每天10:00-10:59每分鐘觸發(fā)一次
    0 0/5 10 * * ? 每天 10:00-10:59每隔5分鐘觸發(fā)
    0 0/5 10,15 * * ? 每天10:00-10:59,15:00-15:59(每隔5分觸發(fā))
    0 0-5 15 * * ? 每天15:00-15:05每分觸發(fā)
    0 10,55 14 ? 3 WED 3月份每周三14:10觸發(fā) ,14:55觸發(fā)
    0 15 10 ? * MON-FRI 從周一到周五每天10:15分觸發(fā)
    0 15 10 15 * ? 每月15號10:15分觸發(fā)
    0 15 10 L * ? 每月最后一天的10:15分觸發(fā)
    0 15 10 ? * 6L 每月最后一周的星期五的10:15分觸發(fā)
    0 15 10 ? * 6L 2017-2020 從2017年到2020年每月最后一個星期五的10:15分觸發(fā)
    0 15 10 ? * 6#3 每月的第三周的星期五10:15觸發(fā)
    0 0 12 1/5 * ? 每月的第一天開始每隔5天的12:00觸發(fā)一次
    0 11 11 11 11 ? 每年的11月11號 11點11分觸發(fā)(光棍節(jié))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容