golang 定时任务

更新日期: 2020-06-10 阅读次数: 7125 字数: 284 分类: 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 聊聊, 查看更多联系方式