golang定時任務(wù)cron項目實操指南
一、簡介:
1、cron包
cron包:"github.com/robfig/cron/v3"
2、表達式,go cron使用的和 Linux crontab 一樣的表達式
# 文件格式說明
# ┌──分鐘(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)計前一天運營數(shù)據(jù)
1、啟動daemon 守護進程
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)文章
Go語言使用goroutine及通道實現(xiàn)并發(fā)詳解
這篇文章主要為大家介紹了Go語言使用goroutine及通道實現(xiàn)并發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個知識點
這篇文章主要介紹了詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個知識點,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08go 判斷兩個 slice/struct/map 是否相等的實例
這篇文章主要介紹了go 判斷兩個 slice/struct/map 是否相等的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Go語言中TCP/IP網(wǎng)絡(luò)編程的深入講解
這篇文章主要給大家介紹了關(guān)于Go語言中TCP/IP網(wǎng)絡(luò)編程的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05簡單談?wù)凣olang中的字符串與字節(jié)數(shù)組
這篇文章主要給大家介紹了關(guān)于Golang中字符串與字節(jié)數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03