45 lines
849 B
Go
45 lines
849 B
Go
package cron
|
||
|
||
import (
|
||
"energy-management-system/utils"
|
||
"energy-management-system/utils/recovery"
|
||
"fmt"
|
||
"github.com/robfig/cron/v3"
|
||
"reflect"
|
||
"runtime"
|
||
)
|
||
|
||
var servers server
|
||
|
||
type server struct {
|
||
Cron []string
|
||
Func []func()
|
||
}
|
||
|
||
func (c *server) register(cron string, f func()) {
|
||
c.Cron = append(c.Cron, cron)
|
||
c.Func = append(c.Func, f)
|
||
}
|
||
|
||
func CronRun() {
|
||
c := cron.New()
|
||
for k, v := range servers.Cron {
|
||
eid, err := c.AddFunc(v, wrap(servers.Func[k]))
|
||
fmt.Println("定时任务:", eid, "添加成功")
|
||
utils.Exit(err, "添加定时器错误:")
|
||
}
|
||
c.Start()
|
||
}
|
||
|
||
func wrap(f func()) func() {
|
||
return func() {
|
||
defer recovery.CronRecovery(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name())
|
||
f()
|
||
}
|
||
}
|
||
|
||
// Register 参数:规则(s m h d m w),函数
|
||
func Register(rule string, f func()) {
|
||
servers.register(rule, f)
|
||
}
|