golang 定时任务

文章目录

    需求

    我将一部分事件日志存储到了 MySQL 上,只有最近几天的有参考价值,所以需要每天定时删除早期的日志,以节省存储空间。

    技术选型

    自从用了 Laravel 的定时任务之后,我就再也不喜欢用 Linux 系统自带的 crontab 了,因为部署时还需要手动配置。
    项目多了之后,就容易忘记。不如在 web 服务框架中直接写,不容易遗忘。

    golang 的计划任务三方库

    https://godoc.org/github.com/robfig/cron

    是否需要配置 crontab

    golang 的这个实现,跟 laravel 的不太一样,不需要再配置一次 crontab。

    实际上是开了个 goroutine.

    Funcs are invoked in their own goroutine, asynchronously.

    依赖安装

    go get github.com/robfig/cron/v3@v3.0.0
    

    代码目录结构

    在 gin web 项目中,相对在 main 函数中列一堆 c.AddFunc,我觉得把所有定时任务的代码都放到一个文件中管理比较清晰。

    例如,在项目根目录下新建一个 cron.go 文件

    package main
    
    import (
    	"fmt"
    	"github.com/robfig/cron/v3"
    )
    
    func start_cron() {
    	c := cron.New()
    	c.AddFunc("* * * * *", func() { fmt.Println("OK") })
    	c.Start()
    }
    

    然后在 gin 的 main 函数中调用 start_cron().

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式