摘要
本文内容转自网络,个人学习记录使用,请勿传播
github.com/astaxie/beego/toolbox
beego
的toolbox
模块,包括了以下几个功能:
- 健康检查
- 性能调试
- 访问统计
- 计划任务
1 | package main |
函数 NewTask(func NewTask(tname string, spec string, f TaskFunc))
会返回一个新的任务,它需要三个参数:
tname
表示任务名称spec
为任务时间描述f
为要执行的函数。
spec
详解
符号 | 含义 | 示例 |
---|---|---|
* |
表示任何时间 | |
, |
表示分割 | 如第三段里:2,4,表示 2 点和 4 点执行 |
- |
表示一个段 | 如第三端里: 1-5,就表示 1 到 5 点 |
/n |
表示每个n的单位执行一次 | 如第三段里,*/1, 就表示每隔 1 个小时执行一次命令。也可以写成1-23/1 |
github.com/jasonlvhit/gocron
1 | package main |
这里需要关注一下,gocron对lock的实现,从代码上看Job结构体的lock属性,用于控制多实例job并发执行。但项目woner提到的 multiple instances 指的并不是跨服务器的多实例,而是在同一应用服务 里的多任务实例(也就是1个app服务中多个任务,粒度是只在统一应用内)。如果跨server则lock需要自行依赖redis或其他分布式锁来管理。通过读源码的run方法,j.lock来控制job并发,但一旦跨server job.lock属性是没法共享的。这里doc上给的解释有点歧义,需要注意。
github.com/jiajunhuang/gotasks
1 | package main |