Cron 是一種用于設置定期執行任務的表達式。最早出現于 Unix 操作系統,crontab 軟件中就是一款使用這套語法的任務管理工具,常用于備份系統或清理日志。
(資料圖片僅供參考)
現在,Cron 表達式已被廣泛地應用于各種操作系統和應用程序中。平時看到的像是 0 0 * * *
、*/5 * * * *
等這些字符串都屬于 Cron 表達式。 中也支持使用 cron
包來指定定時任務。
既然使用那么廣泛,那么它是如何定義的呢?接下來我們就來學習。
語法
經典的 Cron 表達式由 5 位構成,中間用空格分割。語法如下:
[minute] [hour] [day of month] [month] [day of week]
每個字段的含義是:
[minte]
表示分鐘。取值范圍 0 到 59
[hour]
表示小時。取值范圍 0 到 23
[day of month]
表示幾號。取值范圍 1 到 23
[month]
表示幾月。取值范圍 1 到 12,也可以是用名稱簡寫(從 Jan
到 Dec
)
[day of week]
表示周幾。取值范圍 0 到 6,也可以是用名稱簡寫(從 Sun
到 Sat
)
通用模式
每個位置上除了上面列舉的值,還有一些通用模式可以使用:
逗號 ,
:表示當前使用的值的列表。比如 [minte]
取值 1,3,5
時,表示1分、3分和5分時各執行一次
連字符號 -
:表示當前使用的值的范圍。比如 [minte]
取值 1-5
時,等同于 1,2,3,4,5
,表示1分、2分、3分、4分和5分時各執行一次
星號 *
:表示“從頭到尾(frist-last)”。比如 [minte]
取值 *
時,等同于 0-59
,表示每分鐘執行一次
斜杠符號 /
:表示步進。比如 [minte]
取值 */2
,表示每 2 分鐘執行一次,即在2分、4分……58分、0分(下一個小時)分別執行一次;當 [minte]
取值 1-9/2
時,等同于 1,3,5,7,9
,表示1分、5分、5分、7分和9分時各執行一次。步進默認為 1
,即 *
的寫法等同于 */1
,表示每分鐘執行一次。
練習
* * * * *
表示每分鐘執行一次。等同于 */1 * * * *
、0-59/1 * * * *
。
*/30 * * * *
表示每半個小時執行一次。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-03 16:00:00
then at 2023-08-03 16:30:00
then at 2023-08-03 17:00:00
then at 2023-08-03 17:30:00
then at 2023-08-03 18:00:00
……
0 * * * *
表示每小時(整點)執行一次。等同于 0 */1 * * *
。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-03 16:00:00
then at 2023-08-03 17:00:00
then at 2023-08-03 18:00:00
then at 2023-08-03 19:00:00
then at 2023-08-03 20:00:00
……
0 9-17 * * *
從早上9點到下午5點,每小時(整點)執行一次。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-03 16:00:00
then at 2023-08-03 17:00:00
then at 2023-08-04 09:00:00
then at 2023-08-04 10:00:00
then at 2023-08-04 11:00:00
……
0 0 * * *
表示每天(整點)執行一次。等同于 0 0 */1 * *
。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-04 00:00:00
then at 2023-08-05 00:00:00
then at 2023-08-06 00:00:00
then at 2023-08-07 00:00:00
then at 2023-08-08 00:00:00
……
0 8 * * *
表示每天上午 8 點執行一次。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-04 08:00:00
then at 2023-08-05 08:00:00
then at 2023-08-06 08:00:00
then at 2023-08-07 08:00:00
then at 2023-08-08 08:00:00
……
0 8 * * 5
表示每周五上午 8 點執行一次。等同于 0 0 * * FRI
,相當于是 1 周執行 1 次。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-08-04 00:00:00
then at 2023-08-11 00:00:00
then at 2023-08-18 00:00:00
then at 2023-08-25 00:00:00
then at 2023-09-01 00:00:00
……
0 8 * * 4,5
則表示每周四、每周五早上 8 點執行一次。
0 0 * * 1-5
表示每個工作日 8 點執行一次。
0 8 * * 6,0
則表示周末兩天早 8 點執行一次。
0 0 1 * *
表示每月 1 號執行一次。等同于 0 0 1 */1 *
。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-09-01 00:00:00
then at 2023-10-01 00:00:00
then at 2023-11-01 00:00:00
then at 2023-12-01 00:00:00
then at 2024-01-01 00:00:00
……
0 0 1 */3 *
表示每個季度執行一次。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2023-10-01 00:00:00
then at 2024-01-01 00:00:00
then at 2024-04-01 00:00:00
then at 2024-07-01 00:00:00
then at 2024-10-01 00:00:00
……
0 0 1 1 *
表示每年執行一次(1月1號 00:00)。
如果當前是 2023-08-03 15:41。那么后續執行時間分別是:
next at 2024-01-01 00:00:00
then at 2025-01-01 00:00:00
then at 2026-01-01 00:00:00
then at 2027-01-01 00:00:00
then at 2028-01-01 00:00:00
……
掌握以上所列舉的這些表達式就足夠以后使用的了。
中使用
可以使用 cron 包執行定時任務。需要注意的是,cron 采用的是 6 位 Cron 表達式語法。
跟經典語法相比:1. 第一位表示“秒”,而不是經典定義中的“分鐘”2.?另外,cron 包目前的 v2 版本的[month]的取值范圍是 0~11,而非 1~12。不過官方文檔說,cron v3 版本開始[month]的取值范圍將調整為 1~12。
下面就來安裝依賴。
使用方式如下:
總結
Cron 是一種用于設置定期執行任務的表達式,語法比較簡單,常用于備份系統或清理日志,現在已被廣泛地應用于各種操作系統和應用程序中。經典的 Cron 表達式由 5 位構成,中間用空格分割,分表表示“分鐘”、“小時”、“幾號”、“幾月” 和 “周幾”。實際使用時,不同軟件可能會做一些拓展,比如 的 Cron 使用的就是 6 位,稍稍注意一下即可。
參考鏈接
●/package/cron●/●/