cronjob

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2023 License: MIT Imports: 4 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CronJob

type CronJob interface {
	// String 可选的任务文字描述
	String() string
	// Interval 任务执行间隔, 调度协程会在此时间间隔内循环触发 Do 任务, 任务的触发间隔不考虑任务的执行时间
	Interval() time.Duration
	// Do 定时任务, 每 Interval 个时间间隔都将触发此任务,即便上一个任务可能因超时未执行完毕.
	// 其中 Do 的执行耗时应 <= Interval 本身, 否则将视为超时, 超时将触发 WhenTimeout
	Do(ctx context.Context) error
	// WhenError 当 Do 执行失败时触发的回调, 若 Do 执行失败且超时, 则 WhenError 和 WhenTimeout
	// 将同时被执行
	WhenError(errs ...error)
	// WhenTimeout 当定时任务未在规定时间内执行完毕时触发的回调, 当上一次 Do 执行超时时, 此 WhenTimeout 将和
	// Do 同时执行, 即 Do 和 WhenError 在同一个由 WhenTimeout 创建的子协程内。
	WhenTimeout()
	// OnStartup 当任务启动时触发的回调,其中 Do 操作会在此回调执行完毕后启动
	OnStartup()
	// OnShutdown 当任务退出时触发的回调
	OnShutdown()
}

type Job

type Job struct{}

func (*Job) Do

func (c *Job) Do() func(ctx context.Context) error

Do 定时任务

func (*Job) Interval

func (c *Job) Interval() time.Duration

Interval 执行调度间隔

func (*Job) OnShutdown

func (c *Job) OnShutdown()

func (*Job) OnStartup

func (c *Job) OnStartup()

func (*Job) String

func (c *Job) String() string

String 任务文字描述

func (*Job) WhenError

func (c *Job) WhenError(errs ...error)

WhenError 当 Do 执行失败时触发的回调

func (*Job) WhenTimeout

func (c *Job) WhenTimeout()

WhenTimeout 当任务超时时执行的回调

type Schedule

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

func (*Schedule) AtTime

func (s *Schedule) AtTime() <-chan time.Time

AtTime 到达任务的执行时间

func (*Schedule) Cancel

func (s *Schedule) Cancel()

Cancel 取消此定时任务

func (*Schedule) Do

func (s *Schedule) Do()

Do 执行任务

func (*Schedule) Scheduler

func (s *Schedule) Scheduler()

Scheduler 首先在启动前任务执行完成后,当时间到达时就启动一个任务协程去执行自定义任务

func (*Schedule) String

func (s *Schedule) String() string

String 任务描述

type Scheduler

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

func NewScheduler

func NewScheduler(ctx context.Context, lg logger.Iface) *Scheduler

NewScheduler 创建一个任务调度器

@param	ctx	context.Context	根Context
@param	lg	logger.Iface	可选的日志句柄
@return	scheduler 任务调度器

# Usage
// 首先创建一个根 Context
pCtx, _ := context.WithTimeout(context.Background(), 50*time.Second)
scheduler := NewScheduler(pCtx, logger)

// 定义任务, 需实现 CronJob 接口
type Clock struct {
	Job	// 默认 Job 未实现 Do 方法
	lastTime time.Time
}

func (c *Clock) Interval() time.Duration { return 1 * time.Second }
func (c *Clock) String() string          { return "报时器" }

func (c *Clock) Do(ctx context.Context) error {
	diff := time.Now().Sub(c.lastTime)
	c.lastTime = time.Now()
	fmt.Println("time interval:", diff.String())

	return nil
}

// 注册任务
scheduler.Add(&Clock{})
// 运行调度器
scheduler.Run()
// 检测调度器是否退出
<-scheduler.Done()

func (*Scheduler) Add

func (s *Scheduler) Add(jobs ...CronJob) *Scheduler

func (*Scheduler) AddCronjob

func (s *Scheduler) AddCronjob(jobs ...CronJob) *Scheduler

AddCronjob 添加任务

func (*Scheduler) DisableMsg

func (s *Scheduler) DisableMsg() *Scheduler

DisableMsg 禁用内部日志输出

func (*Scheduler) Done

func (s *Scheduler) Done() <-chan struct{}

func (*Scheduler) QuerySchedule

func (s *Scheduler) QuerySchedule(title string) *Schedule

QuerySchedule 依据任务描述查找任务

func (*Scheduler) Run

func (s *Scheduler) Run()

Run 启动任务调度器(非阻塞)

func (*Scheduler) SetLogger

func (s *Scheduler) SetLogger(logger logger.Iface) *Scheduler

Jump to

Keyboard shortcuts

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