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

作者:DaSheng1104 时间:2023-08-26 00:21:40 

一、简介:

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,表示从周日到周六)
# │  │  │  │  │
# *  *  *  *  * 被執行的命令
 

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, err)
} 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:00)执行
_, 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.AmountDataBase
}

// 单利
var (
PaymentStatJob = paymentStatJob{}
)

func (this *paymentStatJob) Run() {
logger.Warningln(">>>>>>>>>>>>> Start paymentStat")

startTime := "2022-01-02"
   endTime := "2022-01-01"
// 查询统计数据
dataList, code := brawn.StationAccountSrv.GetPaymentDate(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("<<<<<<<<<<<<< End paymentStat")
}

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

执行结果

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

来源:https://blog.csdn.net/LoganPython/article/details/125777340

标签:golang,定时任务,cron
0
投稿

猜你喜欢

  • python检测服务器是否正常

    2022-06-18 05:10:19
  • 如何使用python数据处理解决数据冲突和样本的选取

    2021-02-10 11:47:45
  • 一次数据库查询超时优化问题的实战记录

    2024-01-25 18:03:11
  • JavaScrpt的面向对象全面解析

    2024-04-23 09:20:40
  • 又一款MVVM组件 构建自己的Vue组件(2)

    2024-04-30 10:46:40
  • 举例详解Go语言中os库的常用函数用法

    2024-05-08 10:43:53
  • 轻松解决AJAX的中文乱码问题

    2008-09-03 12:55:00
  • PHP GD 图像处理组件的常用函数总结

    2023-11-21 21:39:17
  • 详解Idea 2020 找不到或无法安装官方汉化包解决方案

    2022-03-21 23:01:29
  • DataFrame.to_excel多次写入不同Sheet的实例

    2022-03-26 01:20:14
  • 详解Python进行数据相关性分析的三种方式

    2022-05-09 18:50:12
  • Python安装Graphviz 超详细图文教程

    2023-02-27 16:11:18
  • golang语言实现的文件上传与文件下载功能示例

    2023-06-19 00:05:31
  • mysql中从字段中URL提取域名信息

    2009-05-25 10:35:00
  • splice slice区别

    2024-04-18 10:32:12
  • SQL SERVER 日志已满的处理方法

    2010-07-31 13:32:00
  • Pytorch数据读取之Dataset和DataLoader知识总结

    2023-11-02 22:57:37
  • 浅谈python连续赋值可能引发的错误

    2023-07-12 04:13:32
  • 适宜做简单搜索的MySQL数据库全文索引

    2009-01-04 13:11:00
  • Python给定一个句子倒序输出单词以及字母的方法

    2022-11-21 00:36:50
  • asp之家 网络编程 m.aspxhome.com