Post

定时任务

测试

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 每小时一分钟执行一次
This post is licensed under CC BY 4.0 by the author.