如何使用github.com/robfig/cron找到特定的运行cron作业



我们如何在github.com/robfig/cron中查找特定的运行cron作业?

在通知服务中,我们将通知存储在数据库中,每个通知要么立即发送(给用户(,要么按计划发送。

计划的任务是使用cron作业发送的。如果计划的通知在发送之前被删除,我们如何查找要删除的cron作业?

使用github.com/robfig/cron/v3可以使用Cron.Entry

这是一个基本用法示例:

job := cron.FuncJob(func() {
fmt.Println("Hello Cron")
})
c := cron.New(/* options */) 
entryId := c.Schedule(cron.Every(time.Second*5), job)
// Find the job entry
entry := c.Entry(entryId)
// ... here you can inspect the job `entry`
// Removes the entry, it won't run again
c.Remove(entryId)

CCD_ 3实际上只是CCD_。如果您需要更复杂的行为或状态,您可以自己实现Job接口:

type myJob struct{}
func (j *myJob) Run() {
fmt.Println("foo")
}

然后,您可以通过键入断言来获取作业的特定实例:

j := c.Entry(id).Job.(*myJob)
// ... do something with the *myJob instance

您也可以自定义时间表,通过实现Schedule接口:

type mySchedule struct{}
// Next returns the next activation time, later than the given time.
// Next is invoked initially, and then each time the job is run.
func (s *mySchedule) Next(time.Time) time.Time {
return time.Now().Add(time.Second*5)
}

然后像一样使用它

c := cron.New(/* options */) 
entryId := c.Schedule(&mySchedule{}, &myJob{})

如果您使用包的早期版本,不幸的是,您无法通过id获得单个条目,并且Cron.Schedule也不分配id。您必须自己管理查阅表格。如果可能,我建议升级到v3

相关内容

  • 没有找到相关文章

最新更新