我们如何在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
。