golang中的cron定時任務詳解
阿新 • • 發佈:2021-07-22
cron表示式
順序 | 秒 | 分鐘 | 小時 | 日期 | 月份 | 星期 | 年(可選) |
---|---|---|---|---|---|---|---|
取值 | 0-59 | 0-59 | 0-23 | 1-30(31) | 1-12 | 1-7 | |
允許特殊字元 | , - * / | , - * / | , - * / | , - * / ? L W C | , - * / | , - * / L # C | 1970-2099 , - * / |
欄位含義
- *:代表所有可能的值
- -:指定範圍 ,:列出列舉 例如在分鐘裡,"5,15"表示5分鐘和20分鐘觸發 /:指定增量 例如在分鐘裡,"3/15"表示從3分鐘開始,沒隔15分鐘執行一次 ?:表示沒有具體的值,使用?要注意衝突
- L:表示last,例如星期中表示7或SAT,月份中表示最後一天31或30,6L表示這個月倒數第6天,FRIL表示這個月的最後一個星期五
- W:只能用在月份中,表示最接近指定天的工作日
- #:只能用在星期中,表示這個月的第幾個周幾,例如6#3表示這個月的第3個週五
示例
0 * * * * ? 每1分鐘觸發一次 0 0 * * * ? 每天每1小時觸發一次 0 0 10 * * ? 每天10點觸發一次 0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發 0 30 9 1 * ? 每月1號上午9點半 0 15 10 15 * ? 每月15日上午10:15觸發 */5 * * * * ? 每隔5秒執行一次 0 */1 * * * ? 每隔1分鐘執行一次 0 0 5-15 * * ? 每天5-15點整點觸發 0 0/3 * * * ? 每三分鐘觸發一次 0 0 0 1 * ? 每月1號凌晨執行一次
首先下載cron包
go get -u "github.com/robfig/cron"
程式碼示例
package job import ( "services" "github.com/robfig/cron" ) type Job struct { } func (j *Job) Init () { // 定時任務刷資料 go func() { c := cron.New() // 定時任務 每天凌晨5:05:00執行一次 _ = c.AddJob("0 5 5 * * ?",new(services.Update)) c.Run() }() }
邏輯程式碼
package services type Update struct { } func(r *Update ) Run() { go exceDemo(ExceVmInfo) } func exceDemo(f func()) { f() }