golang定時(shí)任務(wù)cron項(xiàng)目實(shí)操指南
一、簡(jiǎn)介:
1、cron包
cron包:"github.com/robfig/cron/v3"
2、表達(dá)式,go cron使用的和 Linux crontab 一樣的表達(dá)式
# 文件格式說(shuō)明
# ┌──分鐘(0 - 59)
# │ ┌──小時(shí)(0 - 23)
# │ │ ┌──日(1 - 31)
# │ │ │ ┌─月(1 - 12)
# │ │ │ │ ┌─星期(0 - 6,表示從周日到周六)
# │ │ │ │ │
# * * * * * 被執(zhí)行的命令
3、新老版本區(qū)別
老版本的最大區(qū)別在于如果需要秒級(jí)定義,需要額外傳入?yún)?shù),并且可以自由配置參數(shù)
c := cron.New(cron.WithSeconds()) // 秒級(jí)操作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()
}
二、項(xiàng)目實(shí)操
數(shù)據(jù)統(tǒng)計(jì)系統(tǒng) statsys 每天凌晨定時(shí)統(tǒng)計(jì)前一天運(yùn)營(yíng)數(shù)據(jù)
1、啟動(dòng)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)計(jì) 定時(shí)任務(wù)(每天凌晨00:01:00)執(zhí)行
_, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob)
printLog("IncomeStatJob", err)
// 支出數(shù)據(jù)統(tǒng)計(jì) 定時(shí)任務(wù)(每天凌晨00:03:00)執(zhí)行
_, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob)
printLog("PaymentStatJob", err)
// 啟動(dòng)一個(gè)新的 goroutine 做循環(huán)檢測(cè)
c.Start()
select {}
}
func main() {
RunCron()
}2、統(tǒng)計(jì)任務(wù)
// 支出數(shù)據(jù)統(tǒng)計(jì)定時(shí)任務(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"
// 查詢(xún)統(tǒng)計(jì)數(shù)據(jù)
dataList, code := brawn.StationAccountSrv.GetPaymentDate(startTime, endTime)
if code != ecode.SUCC {
logger.Errorf("支出數(shù)據(jù)統(tǒng)計(jì)定時(shí)任務(wù) errCode: %v", code)
return
}
if len(dataList) <= 0 {
logger.Warningln(" >>>>>>>> 暫無(wú) 支出數(shù)據(jù) <<<<<<<<")
return
}
// 保存支付統(tǒng)計(jì)數(shù)據(jù)
this.amountStatDao.SavePaymentStatData(dataList...)
logger.Warningln("<<<<<<<<<<<<< End paymentStat")
}... 具體你的項(xiàng)目多個(gè)任務(wù)
執(zhí)行結(jié)果

總結(jié)
到此這篇關(guān)于golang定時(shí)任務(wù)cron項(xiàng)目實(shí)操的文章就介紹到這了,更多相關(guān)golang定時(shí)任務(wù)cron內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Golang實(shí)現(xiàn)YOLO目標(biāo)檢測(cè)算法
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的重要任務(wù),它不僅可以識(shí)別圖像中的物體,還可以標(biāo)記出物體的位置和邊界框,YOLO是一種先進(jìn)的目標(biāo)檢測(cè)算法,以其高精度和實(shí)時(shí)性而聞名,本文將介紹如何使用Golang實(shí)現(xiàn)YOLO目標(biāo)檢測(cè)算法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11
使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法
go語(yǔ)言web框架挺多的,本文就介紹了一下如何使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
基于Go語(yǔ)言實(shí)現(xiàn)一個(gè)并發(fā)下載器
這篇文章主要為大家詳細(xì)介紹了如何利用GO語(yǔ)言實(shí)現(xiàn)一個(gè)并發(fā)的文件下載器,可以在不重新啟動(dòng)整個(gè)下載的情況下處理錯(cuò)誤,感興趣的小伙伴可以了解一下2023-10-10
golang開(kāi)發(fā)go包依賴(lài)管理godep使用教程
這篇文章主要為大家介紹了golang開(kāi)發(fā)go包依賴(lài)管理godep使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11

