CRON 表達(dá)式詳解
CRON 表達(dá)式是一個(gè)字符串,以 5 或 6 個(gè)空格隔開(kāi),分為 6 或 7 個(gè)域,每一個(gè)域代表一個(gè)含義。
CRON 有如下兩種語(yǔ)法格式:
秒 分 小時(shí) 日期 月份 星期 年
秒 分 小時(shí) 日期 月份 星期
每個(gè)域允許的值
域 | 允許的數(shù)值 | 允許的特殊字符 | 備注 |
秒 | 0~59 | - * / | - |
分 | 0~59 | - * / | - |
小時(shí) | 0~23 | - * / | - |
日期 | 1~31 | - * ? / L W C | - |
月份 | 1~12 | JAN-DEC - * / | - |
星期 | 1~7 | SUN-SAT - * ? / L C # | 1 表示星期天,2 表示星期一,依次類(lèi)推 |
年(可選) | 留空,1970~2099 | , - * / | 自動(dòng)生成,工具不顯示該值 |
特殊字符的含義
字符 | 含義 | 示例 |
* | 表示匹配域的任意值 | 在分這個(gè)域使用 *,即表示每分鐘都會(huì)觸發(fā)事件。 |
? | 表示匹配域的任意值,但只能用在日期和星期兩個(gè)域,因?yàn)檫@兩個(gè)域會(huì)相互影響。 | 要在每月的 20 號(hào)觸發(fā)調(diào)度,不管每個(gè)月的 20 號(hào)是星期幾,則只能使用如下寫(xiě)法: |
- | 表示起止范圍 | 在分這個(gè)域使用 5-20,表示從 5 分到 20 分鐘每分鐘觸發(fā)一次。 |
/ | 表示起始時(shí)間開(kāi)始觸發(fā),然后每隔固定時(shí)間觸發(fā)一次 | 在分這個(gè)域使用 5/20,表示在第 5 分鐘觸發(fā)一次,之后每 20 分鐘觸發(fā)一次,即 5、 25、45 等分別觸發(fā)一次。 |
, | 表示列出枚舉值 | 在分這個(gè)域使用 5,20,則意味著在 5 和 20 分每分鐘觸發(fā)一次。 |
L | 表示最后,只能出現(xiàn)在日和星期兩個(gè)域 | 在星期這個(gè)域使用 5L,意味著在最后的一個(gè)星期四觸發(fā)。 |
W | 表示有效工作日(周一到周五),只能出現(xiàn)在日這個(gè)域,系統(tǒng)將在離指定日期最近的有效工作日觸發(fā)事件。 | 在日這個(gè)域使用 5W,如果 5 號(hào)是星期六,則將在最近的工作日星期五,即 4 號(hào)觸發(fā)。如果 5 號(hào)是星期天,則在 6 號(hào)(周一)觸發(fā);如果 5 號(hào)為工作日,則就在 5 號(hào)觸發(fā)。另外,W 的最近尋找不會(huì)跨過(guò)月份。 |
LW | 這兩個(gè)字符可以連用,表示在某個(gè)月最后一個(gè)工作日,即最后一個(gè)星期五。 | |
# | 表示每個(gè)月第幾個(gè)星期幾,只能出現(xiàn)在星期這個(gè)域 | 在星期這個(gè)域使用 4#2,表示某月的第二個(gè)星期三,4 表示星期三,2 表示第二個(gè)。 |
示例
*/5 * * * * ?
:每隔 5 秒執(zhí)行一次0 */1 * * * ?
:每隔 1 分鐘執(zhí)行一次0 0 2 1 * ?
:每月 1 日的凌晨 2 點(diǎn)執(zhí)行一次0 15 10 ? * MON-FRI
:周一到周五每天上午 10:15 執(zhí)行作業(yè)0 15 10 ? 6L 2002-2006
:2002 年至 2006 年的每個(gè)月的最后一個(gè)星期五上午 10:15 執(zhí)行作業(yè)0 0 23 * * ?
:每天 23 點(diǎn)執(zhí)行一次0 0 1 * * ?
:每天凌晨 1 點(diǎn)執(zhí)行一次0 0 1 1 * ?
:每月 1 日凌晨 1 點(diǎn)執(zhí)行一次0 0 23 L * ?
:每月最后一天 23 點(diǎn)執(zhí)行一次0 0 1 ? * L
:每周星期天凌晨 1 點(diǎn)執(zhí)行一次0 26,29,33 * * * ?
:在 26 分、29 分、33 分執(zhí)行一次0 0 0,13,18,21 * * ?
:每天的 0 點(diǎn)、13 點(diǎn)、18 點(diǎn)、21 點(diǎn)都執(zhí)行一次0 0 10,14,16 * * ?
:每天上午 10 點(diǎn),下午 2 點(diǎn),4 點(diǎn)執(zhí)行一次0 0/30 9-17 * * ?
:朝九晚五工作時(shí)間內(nèi)每半小時(shí)執(zhí)行一次0 0 12 ? * WED
:每個(gè)星期三中午 12 點(diǎn)執(zhí)行一次0 0 12 * * ?
:每天中午 12 點(diǎn)觸發(fā)0 15 10 ? * *
:每天上午 10:15 觸發(fā)0 15 10 * * ?
:每天上午 10:15 觸發(fā)0 15 10 * * ? *
:每天上午 10:15 觸發(fā)0 15 10 * * ? 2005
:2005 年的每天上午 10:15 觸發(fā)0 * 14 * * ?
:每天下午 2 點(diǎn)到 2:59 期間的每 1 分鐘觸發(fā)0 0/5 14 * * ?
:每天下午 2 點(diǎn)到 2:55 期間的每 5 分鐘觸發(fā)0 0/5 14,18 * * ?
:每天下午 2 點(diǎn)到 2:55 期間和下午 6 點(diǎn)到 6:55 期間的每 5 分鐘觸發(fā)0 0-5 14 * * ?
:每天下午 2 點(diǎn)到 2:05 期間的每 1 分鐘觸發(fā)0 10,44 14 ? 3 WED
:每年三月的星期三的下午 2:10 和 2:44 觸發(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
:每月的最后一個(gè)星期五上午 10:15 觸發(fā)0 15 10 ? * 6L 2002-2005
:2002 年至 2005 年的每月的最后一個(gè)星期五上午 10:15 觸發(fā)0 15 10 ? * 6#3
:每月的第三個(gè)星期五上午 10:15 觸發(fā)