XCron

package
v1.2.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 30, 2021 License: MIT Imports: 6 Imported by: 0

README

定时任务

使用github.com/robfig/cron/v3包构建定时任务服务

Cron 包基本用法

一、关于spec参数:与linux cron 基本一样
 ┌─────────────second 范围 (0 - 59),允许特殊字符:* / , -
 │ ┌───────────── min (0 - 59),允许特殊字符:* / , -
 │ │ ┌────────────── hour (0 - 23),允许特殊字符:* / , -
 │ │ │ ┌─────────────── day of month (1 - 31),允许特殊字符:* / , - ?
 │ │ │ │ ┌──────────────── month (1 - 12),允许特殊字符:* / , -
 │ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
 │ │ │ │ │ │                  Saturday),允许特殊字符: * / , - ?
 │ │ │ │ │ │
 │ │ │ │ │ │
 * * * * * *
Cron 特殊字符

星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月

斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+015)、18(3+115)、33(3+215)、48(3+315) 这些时间点执行),这里也可以表示为:3/15

逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行

连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)

问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *

Cron预定义时间的parser
输入						|	简述								|	相当于
---------------------------------------------------------------------------
@yearly 				|  	(or @annually)	1月1日午夜运行一次	|	0 0 0 1 1 *
@monthly				|	每个月的午夜,每个月的第一个月运行一次	|	0 0 0 1 * *
@weekly					|  	每周一次,周日午夜运行一次			|	0 0 0 * * 0
@daily (or @midnight)	|  	每天午夜运行一次					|	0 0 0 * * *
@hourly					|	每小时运行一次						|	0 0 * * * *
二、关于添加Jobs:
用法1:添加单独的定时任务
_, err = c.AddFunc("*\/5 * * * * *", func() {

})
if err != nil {
	return err
}

用法2:添加自定义的带参数任务,实现Job接口
type DemoJob1 struct {
	Args string // 可以理解为cmd的执行参数,传入AddJob()前设置
}

func (job *DemoJob1) Run() {
	fmt.Println("The demo job1's args is :",job.Args)
}
_, err = c.AddJob("*\/5 * * * * *", &DemoJob1{"arg1"})
if err != nil {
	return err
}
用法3:设置一个schedule执行时间,为这个schedule设置多个自定义任务
(1)标准parser 不包含解析秒的schedule
schedule, err := cron.ParseStandard("5 * * * *")
(2)如需包含秒需NewParser
 schedule, err := cron.NewParser(
  cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor, ).Parse("5 * * * * *")

c.Schedule(schedule,new(DemoJob))
c.Schedule(schedule,cron.FuncJob(func() {fmt.Println("another func job 1...")}))
c.Schedule(schedule,cron.FuncJob(func() {fmt.Println("another func job 2...")}))
c.Schedule(schedule,cron.FuncJob(func() {fmt.Println("another func job 3...")}))

用法4:定义一个cron执行链
chainJobs := cron.NewChain(DemoWrapper1, DemoWrapper2).Then(&DemoJob{"arg"})
_, err = c.AddJob("1 * * * * *", chainJobs)
if err != nil {
	return err
}

资源组件用例

一、定义你的Tasks

定义你的任务

type DemoJob struct {
	Args string // 可以理解为cmd的执行参数,传入AddJob()前设置
}

func (job *DemoJob) Run() {
	fmt.Println("The demo job's args is :",job.Args)
}


启动资源组件时注册,启动后会自动运行任务

// ...

taskList := make([]*XCron.NewTask,0)
task1 := NewTask("*/2 * * * * *", &JobA{})
...
taskList = append(taskList,task1)

goinfras.Register(XCron.NewStarter(taskList...)

// ...

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CreateDefaultManager

func CreateDefaultManager(config *Config) error

创建一个默认配置的Manager

func NewCronLogger

func NewCronLogger() *cronLogger

func NewStarter

func NewStarter(tasks ...*Task) *starter

应用注册启动器时创建

func XFManager

func XFManager(f func(m *Manager) error) error

资源组件闭包执行

Types

type Config

type Config struct {
	Location string // 定时器时区设置
}

func DefaultConfig

func DefaultConfig() *Config

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

定时任务管理器

func NewManager

func NewManager(cfg *Config) (*Manager, error)

func XManager

func XManager() *Manager

资源组件实例调用

func (*Manager) RegisterTasks

func (m *Manager) RegisterTasks(tasks ...*Task) ([]cron.EntryID, error)

注册任务

func (*Manager) RestartCron

func (m *Manager) RestartCron()

重启所有任务

func (*Manager) RunTasks

func (m *Manager) RunTasks()

运行所有任务

func (*Manager) StopCron

func (m *Manager) StopCron()

停止所有任务

type Task

type Task struct {
	// contains filtered or unexported fields
}

func NewTask

func NewTask(spec string, job cron.Job) *Task

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL