开发者

golang定时任务cron项目实操指南

开发者 https://www.devze.com 2022-12-26 10:41 出处:网络 作者: DaSheng1104
目录一、简介:1、cron包2、表达式,go cron使用的和 linux crontab 一样的表达式3、新老版本区别二、项目实操1、启动daemon 守护进程2、统计任务总结一、简介:
目录
  • 一、简介:
    • 1、cron包
    • 2、表达式,go cron使用的和 linux crontab 一样的表达式
    • 3、新老版本区别
  • 二、项目实操
    • 1、启动daemon 守护进程
    • 2、统计任务
  • 总结

    一、简介:

    1、cron包

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

    文档:cron package - github.com/robfig/cron - Go Packages

    2、表达式,go cron使用的和 Linux crontab 一样的表达式

    # 文件格www.devze.com式說明

    # ┌──分鐘(0 - 59)

    # │  ┌──小時(0 - 23)

    # │  │  ┌──日(1 - 31)

    # │  │  │  ┌─月(1 - 12)

    # │  │  │  │  ┌─星期(0 - 6,表示从周日到周六)

    # │  │  │  │  │

    # *  *  *  *  * 被執行的命令

     

    3、新老版本区别

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

    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()
    }

    多任务 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()
    }

    golang定时任务cron项目实操指南

    二、项目实操

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

    1、启动daemon 守护进程

    package main
     
    import (
    	"github.com/robfig/cron/v3"
    	logger "github.com/sirupsen/logrus"
    	"statsys/scheduler/crob_job"  // 这里引入你的任务
    )
     
     
     
    func printLog(crobJob string, err error) {
    	if err != nil {
    		logger.Errorf("Start %s Error, err: %v", crobJob, er开发者_Go学习r)
    	} else {
    		logger.Infof("Start %s Successful!", crobJob)
    	}
    }
     
    func RunCron() {
    	c := cron.New()
     
    	// 收入数据统计 定时任务(每天凌晨00:01:00)执行
    	_, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob) 
    	printLog("IncomeStatJob", err)
     
    	// 支出数据统计 定时任务(每天凌晨00:03:zXYiFUJwe00)执行
    	_, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob)
    	printLog("PaymentStatJob", err)
     
    	
     
    	// 启动一个新的 goroutine 做循环检测
    	c.Start()
    	select {}
    }
     
    func main() {
    	RunCron()
    }

    2、统计任务

    // 支出数据统计定时任务
    package crob_job
     
     
    type paymentStatJob struct {
    	amountStatDataBase *amount_stat.AmountDatwww.devze.comaBase
    }
     
    // 单利
    var (
    	PaymentStatJob = paymentStatJob{}
    )
     
    func (this *paymentStatJob) Run() {
    	logger.Warningln(">>>>>>>>>>>>> Start paymentStat")
     
        startTime := "2022-01-02"
        endTime := "2022-01-01"
    	// 查询统计数据
    	dataList, code := brawn.StationAccountSrv.GetPajsymentDate(startTime, endTime)
    	if code != ecode.SUCC {
    		logger.Errorf("支出数据统计定时任务 errCode: %v", code)
    		return
    	}
     
    	if len(dataList) <= 0 {
    		logger.Warningln(" >>>>>>>> 暂无 支出数据 <<<<<<<<")
    		return
    	}
     
    	// 保存支付统计数据
    	this.amountStatDao.SavePaymentStatData(dataList...)
     
    	logger.Warningln("<<<<<<<<&jslt;<<<< End paymentStat")
    }

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

    执行结果

    golang定时任务cron项目实操指南

    总结

    到此这篇关于golang定时任务cron项目实操的文章就介绍到这了,更多相关golang定时任务cron内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号