[golang]使用gocron編寫定時任務


前言

linux自帶的crontab默認情況下只能精確到分鍾,沒法執行秒級任務。當然,也不是不行,比如:

* * * * * for i in $(seq 1 11);do echo hello >> /home/heruos/tmp.txt;sleep 5;done

看起來low了點,但也不是不能用。本文推薦go的一個第三方模塊——gocron,配置定時任務也相當簡單。

  • 安裝
go get -u github.com/go-co-op/gocron

基礎使用示例

package main

import (
	"fmt"
	"time"
	"github.com/go-co-op/gocron"
)

func cron1() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

func main() {
	timezone,_ := time.LoadLocation("Asia/Shanghai")
	s := gocron.NewScheduler(timezone)

	// 每3秒執行一次
	s.Every(3).Seconds().Do(cron1)

	s.StartBlocking()
}

定時示例

// 每5秒執行一次
s.Every(5).Seconds().Do(func(){ ... })

// 每5天執行
s.Every(5).Days().Do(func(){ ... })

// 解析字符串。每5秒執行
s.Every("5s").Do(cron2)

// 每月1號、2號和3號的10:00執行一次
s.Every(1).Month(1,2,3).At("10:00").Do(func(){ ... })

// 每天10:30執行一次
s.Every(1).Day().At("10:30").Do(func(){ ... })

// 每天10:30和08:00執行一次
s.Every(1).Day().At("10:30;08:00").Do(func(){ ... })

// 解析crontab表達式,每分鍾執行一次
s.Cron("* * * * *").Do(func(){ ... })

啟動方式

啟動scheduler有兩種方式:

  • s.StartAsync():異步調用,適合集成到其它系統。
  • s.StartBlocking():阻塞調用,適合單純的定時任務場景。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM