美文网首页
go 定时任务库 cron

go 定时任务库 cron

作者: wayyyy | 来源:发表于2022-05-02 00:04 被阅读0次

工作需要使用定时任务,比如每隔一段时间统计以下文件个数和流量等等。需要做些定时任务,于是采用了 github.com/robfig/cron这个库

package main

import (
    "fmt"
    "github.com/robfig/cron"
    "time"
)

var JobSpec = "@every 10s"

type TaskDemo struct {
    taskName string
    schedule cron.Schedule
}

func (task TaskDemo) Run() {
    fmt.Println(fmt.Sprintf("now: %d, %s run, next run %d", time.Now().Unix(), task.taskName, task.schedule.Next(time.Now()).Unix()))
}

func StartTaskDemoJob() error {
    schedule, err := cron.Parse(JobSpec)
    if err != nil {
        fmt.Println("cron Parse failed, error with", err.Error())
        return err
    }

    crontab := cron.New()
    taskDemo := TaskDemo{
        taskName: "taskDemo",
        schedule: schedule,
    }

    err = crontab.AddJob(JobSpec, taskDemo)
    if err != nil {
        fmt.Println("cron add failed, error with", err.Error())
        return err
    }

    crontab.Start()
}

func main() {
    StartTaskDemoJob()
    
    select {
    }
}

输出:


image.png

实际上线使用发现,run 中花费的时间很长的话,比如大于定时任务间隔时间,就会启很多的协程,如果要求每个定时任务必须执行完了之后,才能执行下一次任务的话,那么可以简单使用锁来解决:

var isCheckTaskRunning = false
var isCheckTaskRunningLock sync.Mutex
 
func (task TaskDemo) Run() {
    isCheckTaskRunning.Lock()
    if isCheckTaskRunning {
        isCheckTaskRunning.UnLock() 
        return
    }

    isCheckTaskRunning = true
    isCheckTaskRunning.UnLock()  
    
    fmt.Println(fmt.Sprintf("now: %d, %s run, next run %d", time.Now().Unix(), task.taskName, task.schedule.Next(time.Now()).Unix()))

    isCheckTaskRunning.Lock()
    isCheckTaskRunning = false
    isCheckTaskRunning.UnLock()
}

相关文章

  • go 定时任务库 cron

    工作需要使用定时任务,比如每隔一段时间统计以下文件个数和流量等等。需要做些定时任务,于是采用了 github.co...

  • GO的定时器Timer 和定时任务cron

    GO的定时器Timer 和定时任务cron 上次我们说到了GO 中 swaggo 的应用,咱们来回顾一下 swag...

  • GO的日志怎么玩?

    GO的日志怎么玩 上次咱们分享了 GO的定时器timer和定时任务 cron,咱们来回顾一下: Timer 是什么...

  • systemd定时器代替cron定时任务

    平时笔者使用cron来完成定时任务,systemd 的定时器也可以完成cron定时任务,而且相对于cron,功...

  • GO-CRON定时任务

    定时任务模块:github.com/robfig/cron/v3注意点:默认以系统时区时间为准执行任务、使用V3版...

  • springboot使用定时器

    使用定时器 开启定时任务功能 配置定时任务 任务执行规则 @Scheduled注解: cron:指定cron表达式...

  • Linux学习第7周定时任务与磁盘管理

    任务: 上次内容回顾 本次内容 定时任务3.1 简介3.2 cron分类3.3 cron使用指南3.4 定时任务规...

  • SpringBoot使用定时任务

    手动装配定时任务组件 编写定时任务 编写cron表达式指定定时任务规则推荐一个非常友好的网站http://cron...

  • Liunx定时任务

    Liunx定时任务 crontab(持续运行) cron守护进程 cron服务 systemctl start ...

  • robfig/cron

    cron Linux中使用内置cron计划任务服务,按照约定的时间定时执行特定的任务(job)。cron服务启动后...

网友评论

      本文标题:go 定时任务库 cron

      本文链接:https://www.haomeiwen.com/subject/oelpyrtx.html