Go标准包(二十七):cron
文章目录
【注意】最后更新于 May 2, 2022,文中内容可能已过时,请谨慎使用。
1.介绍
在Linux
中,通过crontab
命令使任务在约定的时间执行已经计划好的工作,而Go
由于语言的特性,不适合直接使用crontab
来管理计划任务,cron (目前 Star8.3k)是一个用Go
实现的定时任务库,支持秒级定时任务,可以满足绝大多数工作场景需求。
2. 安装
|
|
3. 快速使用
|
|
4. 添加任务方式
4.1 通过AddFunc
具体使用,参见上面的快速使用案例
4.2 通过AddJob
1. 使用步骤
- 第一步:定义类型
- 第二步:实现
cron.Job
接口,即给自定义类型添加方法Run()
- 第三步:通过
AddJob
方法添加到定时任务
2. 使用示例
|
|
5. 执行频率
5.1 cron时间表达式
@注意: cron默认支持最小粒度是分钟,若要支持秒级别,需要传入cron.WithSeconds()
来开启,开启后的cron时间表达式和Linux中的crontab时间表达式会有区别。
1. 开启秒级别后
2. 示例
@注意:下面表格示例,是在开启秒级级别支持情况下的写法。
表达式 | 说明 |
---|---|
* * * * * * |
每秒执行一次 |
0 */1 * * * * |
每分钟执行一次 |
0 0 */1 * * * |
每小时执行一次 |
0 0 0 */1 * * |
每天00:00 执行一次 |
0 30 23 */1 * * |
每天23:30 执行一次 |
0 0 0 1 */1 * |
每月的第一天执行 |
0 30 21 * * 1 |
每周一21:30 执行 |
5.2 预定义时间
1. 预表达式
上面通过表达式写,很容易会写错,还好cron
提供了预表达式,可以很方便各种场景的示例,具体如下:
表达式 | 描述 | 等式 |
---|---|---|
@yearly (or @annually) |
每年1月1日 00:00:00 执行一次 | 0 0 0 1 1 * |
@monthly |
每个月第一天的 00:00:00 执行一次 | 0 0 0 1 * * |
@weekly |
每周周六的 00:00:00 执行一次 | 0 0 0 * * 0 |
@daily (or @midnight) |
每天 00:00:00 执行一次 | 0 0 0 * * * |
@hourly |
每小时执行一次 | 0 0 * * * * |
@every duration |
指定时间间隔执行一次,如 @every 5s ,每隔5秒执行一次。 |
0/5 * * * * * |
2. 固定间隔(@every
)
@every duration
含义为每隔duration
触发一次。<duration>
会调用time.ParseDuration()
函数解析,所以ParseDuration
支持的格式都可以。单位为h(小时)、m(分钟)、s(秒)
表达式 | 说明 |
---|---|
@every 1s |
每秒钟执行一次 |
@every 1m |
每分钟执行一次 |
@every 1h |
每小时执行一次 |
@every 1h1m |
每小时一分钟执行一次 |
文章作者 Learn Go
上次更新 2022-05-02