定制网站golang 定时任务 cron 项目实操

一、简介:

1、cron包

cron包:"github.com/robfig/cron/v3"

文档:

2、表达式,go cron使用的和 Linux 定制网站一样的表达式

# 定制网站文件格式說明
# ┌──分鐘(0 - 59)
# │  ┌──小時(0 - 23)
# │  │  ┌──日(1 - 31)
# │  │  │  ┌─月(1 - 12)
# │  │  │  │  ┌─星期(0 - 6,定制网站表示从周日到周六)
# │  │  │  │  │
# *  *  *  *  * 定制网站被執行的命令
 

 

3、新老版本区别

老版本的最大区别在于如果需要秒级定义,需要额外传入参数,并且可以自由配置参数

c := cron.New(cron.WithSeconds())  // 秒级操作cron.WithSeconds()

 代码示例

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/robfig/cron/v3"
  5. "log"
  6. "os"
  7. )
  8. func RunCron() {
  9. c := cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)), cron.WithLogger(
  10. cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))))
  11. i := 1
  12. EntryID, err := c.AddFunc("*/5 * * * * *", func() {
  13. fmt.Println(time.Now(), "每5s一次----------------", i)
  14. time.Sleep(time.Second *6)
  15. i++
  16. })
  17. fmt.Println(time.Now(), EntryID, err)
  18. c.Start()
  19. select()
  20. }
  21. func main() {
  22. RunCron()
  23. }

多任务 AddJob

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/robfig/cron/v3"
  5. )
  6. type Job1 struct {
  7. }
  8. func (t Job1) Run() {
  9. fmt.Println(time.Now(), "I'm Job1")
  10. }
  11. type Job2 struct {
  12. }
  13. func (t Job2) Run() {
  14. fmt.Println(time.Now(), "I'm Job2")
  15. }
  16. func RunCron() {
  17. c := cron.New(cron.WithSeconds())
  18. EntryID, err := c.AddJob("*/5 * * * * *", Job1{})
  19. fmt.Println(time.Now(), EntryID, err)
  20. EntryID, err = c.AddJob("*/10 * * * * *", Job2{})
  21. fmt.Println(time.Now(), EntryID, err)
  22. c.Start()
  23. select()
  24. }
  25. func main() {
  26. RunCron()
  27. }

 

 

二、项目实操

数据统计系统 statsys 每天凌晨定时统计前一天运营数据

1、启动daemon 守护进程

  1. package main
  2. import (
  3. "github.com/robfig/cron/v3"
  4. logger "github.com/sirupsen/logrus"
  5. "statsys/scheduler/crob_job" // 这里引入你的任务
  6. )
  7. func printLog(crobJob string, err error) {
  8. if err != nil {
  9. logger.Errorf("Start %s Error, err: %v", crobJob, err)
  10. } else {
  11. logger.Infof("Start %s Successful!", crobJob)
  12. }
  13. }
  14. func RunCron() {
  15. c := cron.New()
  16. // 收入数据统计 定时任务(每天凌晨00:01:00)执行
  17. _, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob)
  18. printLog("IncomeStatJob", err)
  19. // 支出数据统计 定时任务(每天凌晨00:03:00)执行
  20. _, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob)
  21. printLog("PaymentStatJob", err)
  22. // 启动一个新的 goroutine 做循环检测
  23. c.Start()
  24. select {}
  25. }
  26. func main() {
  27. RunCron()
  28. }

2、统计任务

  1. // 支出数据统计定时任务
  2. package crob_job
  3. type paymentStatJob struct {
  4. amountStatDataBase *amount_stat.AmountDataBase
  5. }
  6. // 单利
  7. var (
  8. PaymentStatJob = paymentStatJob{}
  9. )
  10. func (this *paymentStatJob) Run() {
  11. logger.Warningln(">>>>>>>>>>>>> Start paymentStat")
  12. startTime := "2022-01-02"
  13. endTime := "2022-01-01"
  14. // 查询统计数据
  15. dataList, code := brawn.StationAccountSrv.GetPaymentDate(startTime, endTime)
  16. if code != ecode.SUCC {
  17. logger.Errorf("支出数据统计定时任务 errCode: %v", code)
  18. return
  19. }
  20. if len(dataList) <= 0 {
  21. logger.Warningln(" >>>>>>>> 暂无 支出数据 <<<<<<<<")
  22. return
  23. }
  24. // 保存支付统计数据
  25. this.amountStatDao.SavePaymentStatData(dataList...)
  26. logger.Warningln("<<<<<<<<<<<<< End paymentStat")
  27. }

... 具体你的项目多个任务

执行结果

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发