测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| package main
import (
"fmt"
"github.com/robfig/cron/v3"
"time"
)
func main() {
// 开启秒字段支持
c := cron.New(cron.WithSeconds())
// 传统表达式写法: 每秒执行一次
_, _ = c.AddFunc("0/1 * * * * *", func() {
fmt.Println("传统表达式: ",time.Now().Format("2006-01-02 15:04:05"))
})
// 预定义表达式
_,_ = c.AddFunc("@every 1s", func() {
fmt.Println("预定义表达式: ",time.Now().Format("2006-01-02 15:04:05"))
})
// 启动
c.Start()
// 防止程序直接退出
time.Sleep(time.Second * 3)
}
/**输出
预定义表达式: 2021-07-18 10:44:52
传统表达式: 2021-07-18 10:44:52
传统表达式: 2021-07-18 10:44:53
预定义表达式: 2021-07-18 10:44:53
传统表达式: 2021-07-18 10:44:54
预定义表达式: 2021-07-18 10:44:54
*/
|
@注意:下面表格示例,是在开启秒级级别支持情况下的写法。
表达式 |
说明 |
* * * * * * |
每秒执行一次 |
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
)
1
| @every duration`含义为每隔`duration`触发一次。`<duration>`会调用`time.ParseDuration()`函数解析,所以`ParseDuration`支持的格式都可以。单位为`h(小时)、m(分钟)、s(秒)
|
表达式 |
说明 |
@every 1s |
每秒钟执行一次 |
@every 1m |
每分钟执行一次 |
@every 1h |
每小时执行一次 |
@every 1h1m |
每小时一分钟执行一次 |