網(wǎng)站首頁 編程語言 正文
一、簡介:
1、cron包
cron包:"github.com/robfig/cron/v3"
文檔:cron package - github.com/robfig/cron - Go Packages
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é)
原文鏈接:https://blog.csdn.net/LoganPython/article/details/125777340
相關(guān)推薦
- 2022-03-31 用python實現(xiàn)彈球小游戲_python
- 2022-07-19 git忽略ssl認證和git每次提交代碼都要輸入帳號和密碼
- 2022-09-01 寫一個shell腳本實現(xiàn)視頻處理_linux shell
- 2022-05-29 C#使用DirectX.DirectSound播放語音_C#教程
- 2022-06-07 Python接口自動化之文件上傳/下載接口詳解_python
- 2022-10-10 C++實現(xiàn)特殊矩陣的壓縮存儲算法_C 語言
- 2022-07-30 go語言中slice,map,channl底層原理_Golang
- 2022-10-13 詳解python-opencv?常用函數(shù)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支