You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.4 KiB
50 lines
1.4 KiB
package initialize
|
|
|
|
import (
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"github.com/robfig/cron/v3"
|
|
"github.com/towgo/towgo/errors/tcode"
|
|
"sync"
|
|
g "tgk-touch/internal/global"
|
|
m9zTtyApi "tgk-touch/internal/module/m9zTtyApi"
|
|
)
|
|
|
|
func timer() {
|
|
go func() {
|
|
AddTaskByFunc("ScanM9z", "ScanM9z", "@every 10m", m9zTtyApi.ScanM9z)
|
|
|
|
}()
|
|
}
|
|
|
|
var cronTaskNameMap = map[string]cron.EntryID{}
|
|
var cronLock = sync.Mutex{}
|
|
|
|
func AddTaskByFunc(cronName string, taskName string, spec string, task func()) {
|
|
cronLock.Lock()
|
|
defer cronLock.Unlock()
|
|
cronTaskName := cronName + "-" + taskName
|
|
_, ok := cronTaskNameMap[cronTaskName]
|
|
if ok {
|
|
panic(gerror.New("定时任务名称重复 " + cronTaskName))
|
|
}
|
|
var option []cron.Option
|
|
option = append(option, cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
|
|
cronEnterId, err := g.Timer().AddTaskByFunc(cronName, spec, func() {
|
|
defer func() {
|
|
if exception := recover(); exception != nil {
|
|
if errv, ok := exception.(error); ok {
|
|
g.GVA_LOG.Sugar().Errorf("corn recovered panic err task [%s] sepc [%s] err:%+v \n", taskName, spec, gerror.NewCodef(tcode.CodeInternalPanic, "%+v", errv))
|
|
}
|
|
}
|
|
}()
|
|
|
|
task()
|
|
|
|
}, taskName, option...)
|
|
if err != nil {
|
|
g.Log().Panicf("add timer error: [%s]", err.Error())
|
|
}
|
|
cronTaskNameMap[cronTaskName] = cronEnterId
|
|
g.GVA_LOG.Sugar().Infof("add timer success: cronName [%s] task [%s] sepc [%s]", cronName, taskName, spec)
|
|
}
|