1. 程式人生 > 其它 >golang中的cron定時任務詳解

golang中的cron定時任務詳解

cron表示式

順序分鐘小時日期月份星期年(可選)
取值 0-59 0-59 0-23 1-30(31) 1-12 1-7
允許特殊字元 , - * / , - * / , - * / , - * / ? L W C , - * / , - * / L # C 1970-2099 , - * /

欄位含義

  1. *:代表所有可能的值
  2. -:指定範圍 ,:列出列舉 例如在分鐘裡,"5,15"表示5分鐘和20分鐘觸發 /:指定增量 例如在分鐘裡,"3/15"表示從3分鐘開始,沒隔15分鐘執行一次 ?:表示沒有具體的值,使用?要注意衝突
  3. L:表示last,例如星期中表示7或SAT,月份中表示最後一天31或30,6L表示這個月倒數第6天,FRIL表示這個月的最後一個星期五
  4. W:只能用在月份中,表示最接近指定天的工作日
  5. #:只能用在星期中,表示這個月的第幾個周幾,例如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()
}