定時任務

董雷發表於2021-11-18

定時任務

參考地址

https://www.jianshu.com/p/fd3dda663953

擴充套件

go get -u github.com/robfig/cron

example

比如我們的手機卡假設都是在每個月的開始時間就更新資費:
"0 0 0 1 * *" // 表示每個月1號的00:00:00
"0 1 1 1 * *" // 表示每個月1號的01:01:00

每隔5秒執行一次:"*/5 * * * * ?"
每隔1分鐘執行一次:"0 */1 * * * ?"
每天23點執行一次:"0 0 23 * * ?"
每天凌晨1點執行一次:"0 0 1 * * ?"
每月1號凌晨1點執行一次:"0 0 1 1 * ?"26分、29分、33分執行一次:"0 26,29,33 * * * ?"
每天的0點、13點、18點、21點都執行一次:"0 0 0,13,18,21 * * ?"

pre-defined schedules

Entry Description Equivalent To
@yearly (or @annually) 每年一次,1月1日午夜 0 0 0 1 1 *
@monthly 每月執行一次,午夜,月初 0 0 0 1 * *
@weekly 每週跑步一次,週六和週日之間的午夜 0 0 0 * * 0
@daily (or @midnight) 每天午夜跑步一次 0 0 0 * * *
@hourly 每小時執行一次,每小時開始 0 0 * * * *
@every 每段時間
案例
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })

圖文解釋

 ┌─────────────second 範圍 (0 - 60)
 │ ┌───────────── min (0 - 59)
 │ │ ┌────────────── hour (0 - 23)
 │ │ │ ┌─────────────── day of month (1 - 31)
 │ │ │ │ ┌──────────────── month (1 - 12)
 │ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
 │ │ │ │ │ │                  Saturday)
 │ │ │ │ │ │
 │ │ │ │ │ │
 * * * * * *  
匹配符號

星號(*) :表示 cron 表示式能匹配該欄位的所有值。如在第5個欄位使用星號(month),表示每個月
斜線(/):表示增長間隔,如第2個欄位(minutes) 值是 3-59/15,表示每小時的第3分鐘開始執行一次,之後 每隔 15 分鐘執行一次(即 33+0*15)、183+1*15)、333+2*15)、483+3*15) 這些時間點執行),這裡也可以表示為:3/15
逗號(,):用於列舉值,如第6個欄位值是 MON,WED,FRI,表示 星期一、三、五 執行
連字號(-):表示一個範圍,如第3個欄位的值為 9-17 表示 9am 到 5pm 直接每個小時(包括917問號(?):只用於 (Day of month)星期(Day of week),表示不指定值,可以用於代替 *

常用任務

每隔5秒執行一次:*/5 * * * * ?
每隔1分鐘執行一次:0 */1 * * * ?   
每天23點執行一次:0 0 23 * * ?
每天凌晨1點執行一次:0 0 1 * * ?
每月1號凌晨1點執行一次:0 0 1 1 * ?26分、29分、33分執行一次:0 26,29,33 * * * ?
每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ?

*/ 和 0/ 的區別

  • 0 0/10 * * * 與 0 */10 * * * 的差別在於什麼地方
    0 0/10 * * *0 */10 * * * 的差別在於什麼地方。
    在說這兩者的差別之前,先說下各個字元代表的含義。0代表從0分開始,*代表任意字元,/代表遞增。
    也就是說0 0/10 * * *代表從0分鐘開始,每10分鐘執行任務一次。0 */10 * * *代表從任務啟動開始每10分鐘執行任務一次。有人會問,這不是一樣的麼?
    答案是不一樣的。因為起始的時間不一樣。例如:從5:07分鐘的時候執行該任務第一種寫法會在5:10的時候進行執行,寫法二會在5:17進行執行。這就是兩者的差別。
    當然0 0/1 * * *0 */1 * * *有時會被認為是同一種寫法
本作品採用《CC 協議》,轉載必須註明作者和本文連結