golang定時任務(wù)cron項目實操指南
一、簡介:
1、cron包
cron包:"github.com/robfig/cron/v3"
2、表達(dá)式,go cron使用的和 Linux crontab 一樣的表達(dá)式
# 文件格式說明
# ┌──分鐘(0 - 59)
# │ ┌──小時(0 - 23)
# │ │ ┌──日(1 - 31)
# │ │ │ ┌─月(1 - 12)
# │ │ │ │ ┌─星期(0 - 6,表示從周日到周六)
# │ │ │ │ │
# * * * * * 被執(zhí)行的命令
3、新老版本區(qū)別
老版本的最大區(qū)別在于如果需要秒級定義,需要額外傳入?yún)?shù),并且可以自由配置參數(shù)
c := cron.New(cron.WithSeconds()) // 秒級操作cron.WithSeconds()
代碼示例
package main
import (
"fmt"
"github.com/robfig/cron/v3"
"log"
"os"
)
func RunCron() {
c := cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)), cron.WithLogger(
cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))))
i := 1
EntryID, err := c.AddFunc("*/5 * * * * *", func() {
fmt.Println(time.Now(), "每5s一次----------------", i)
time.Sleep(time.Second *6)
i++
})
fmt.Println(time.Now(), EntryID, err)
c.Start()
select()
}
func main() {
RunCron()
}多任務(wù) AddJob
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
type Job1 struct {
}
func (t Job1) Run() {
fmt.Println(time.Now(), "I'm Job1")
}
type Job2 struct {
}
func (t Job2) Run() {
fmt.Println(time.Now(), "I'm Job2")
}
func RunCron() {
c := cron.New(cron.WithSeconds())
EntryID, err := c.AddJob("*/5 * * * * *", Job1{})
fmt.Println(time.Now(), EntryID, err)
EntryID, err = c.AddJob("*/10 * * * * *", Job2{})
fmt.Println(time.Now(), EntryID, err)
c.Start()
select()
}
func main() {
RunCron()
}
二、項目實操
數(shù)據(jù)統(tǒng)計系統(tǒng) statsys 每天凌晨定時統(tǒng)計前一天運(yùn)營數(shù)據(jù)
1、啟動daemon 守護(hù)進(jìn)程
package main
import (
"github.com/robfig/cron/v3"
logger "github.com/sirupsen/logrus"
"statsys/scheduler/crob_job" // 這里引入你的任務(wù)
)
func printLog(crobJob string, err error) {
if err != nil {
logger.Errorf("Start %s Error, err: %v", crobJob, err)
} else {
logger.Infof("Start %s Successful!", crobJob)
}
}
func RunCron() {
c := cron.New()
// 收入數(shù)據(jù)統(tǒng)計 定時任務(wù)(每天凌晨00:01:00)執(zhí)行
_, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob)
printLog("IncomeStatJob", err)
// 支出數(shù)據(jù)統(tǒng)計 定時任務(wù)(每天凌晨00:03:00)執(zhí)行
_, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob)
printLog("PaymentStatJob", err)
// 啟動一個新的 goroutine 做循環(huán)檢測
c.Start()
select {}
}
func main() {
RunCron()
}2、統(tǒng)計任務(wù)
// 支出數(shù)據(jù)統(tǒng)計定時任務(wù)
package crob_job
type paymentStatJob struct {
amountStatDataBase *amount_stat.AmountDataBase
}
// 單利
var (
PaymentStatJob = paymentStatJob{}
)
func (this *paymentStatJob) Run() {
logger.Warningln(">>>>>>>>>>>>> Start paymentStat")
startTime := "2022-01-02"
endTime := "2022-01-01"
// 查詢統(tǒng)計數(shù)據(jù)
dataList, code := brawn.StationAccountSrv.GetPaymentDate(startTime, endTime)
if code != ecode.SUCC {
logger.Errorf("支出數(shù)據(jù)統(tǒng)計定時任務(wù) errCode: %v", code)
return
}
if len(dataList) <= 0 {
logger.Warningln(" >>>>>>>> 暫無 支出數(shù)據(jù) <<<<<<<<")
return
}
// 保存支付統(tǒng)計數(shù)據(jù)
this.amountStatDao.SavePaymentStatData(dataList...)
logger.Warningln("<<<<<<<<<<<<< End paymentStat")
}... 具體你的項目多個任務(wù)
執(zhí)行結(jié)果

總結(jié)
到此這篇關(guān)于golang定時任務(wù)cron項目實操的文章就介紹到這了,更多相關(guān)golang定時任務(wù)cron內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Golang?Slice切片如何擴(kuò)容的實現(xiàn)
本文主要介紹了淺談Golang?Slice切片如何擴(kuò)容的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
Go語言使用goroutine及通道實現(xiàn)并發(fā)詳解
這篇文章主要為大家介紹了Go語言使用goroutine及通道實現(xiàn)并發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個知識點
這篇文章主要介紹了詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個知識點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
go 判斷兩個 slice/struct/map 是否相等的實例
這篇文章主要介紹了go 判斷兩個 slice/struct/map 是否相等的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言中TCP/IP網(wǎng)絡(luò)編程的深入講解
這篇文章主要給大家介紹了關(guān)于Go語言中TCP/IP網(wǎng)絡(luò)編程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
簡單談?wù)凣olang中的字符串與字節(jié)數(shù)組
這篇文章主要給大家介紹了關(guān)于Golang中字符串與字節(jié)數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

