2023-06-04 22:54:54 +08:00

64 lines
949 B
Go

package scheduler
import (
"github.com/robfig/cron/v3"
"sync"
)
var taskList = make(chan *CronTask, 10)
var taskMap = make(map[string]*CronTask)
var lock sync.Mutex
var c = newWithSeconds()
type CronTask struct {
Name string
Spec string
Fn func()
}
func AddCronTask(task *CronTask) bool {
lock.Lock()
defer lock.Unlock()
if task == nil {
return false
}
_, exist := taskMap[task.Name]
if exist {
return false
}
taskList <- task
return true
}
func CronRun() {
go c.Start()
//监听任务列表
go func() {
defer close(taskList)
for {
select {
case task, ok := <-taskList:
{
if ok {
_, err := c.AddFunc(task.Spec, task.Fn)
if err != nil {
panic(err)
}
}
}
}
}
}()
}
func newWithSeconds() *cron.Cron {
return cron.New(cron.WithParser(cron.NewParser(
cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
}