framework_v2/internal/cmd/schedule.go

60 lines
1.2 KiB
Go
Raw Normal View History

2024-06-13 01:16:48 +00:00
package cmd
import (
"fmt"
2024-06-22 11:15:41 +00:00
"framework_v2/internal/providers/config"
"framework_v2/internal/providers/ent"
"framework_v2/internal/providers/jobs"
"framework_v2/internal/providers/logger"
"framework_v2/internal/providers/redis"
2024-06-13 01:16:48 +00:00
"github.com/spf13/cobra"
"time"
)
var scheduleCommand = &cobra.Command{
Use: "schedule",
Run: func(cmd *cobra.Command, args []string) {
2024-06-15 16:55:25 +00:00
config.InitConfig()
logger.InitLogger()
ent.InitEnt()
redis.InitRedis()
jobs.InitAsynQClient()
2024-06-13 01:16:48 +00:00
runSchedule()
},
}
func runSchedule() {
2024-06-15 16:55:25 +00:00
if config.Config.DebugMode.Enable {
2024-06-13 01:16:48 +00:00
fmt.Println("调试模式开启,直接触发。")
// RUN JOB
return
}
// 获取下一个整点时间
nextHour := time.Now().Truncate(time.Hour).Add(time.Hour)
// 计算当前时间到下一个整点的时间差
duration := nextHour.Sub(time.Now())
// 设置定时器,在下一个整点触发
timer := time.NewTimer(duration)
// 用无限循环,在每个小时整点执行任务
for {
select {
case <-timer.C:
// 每小时整点执行的代码
fmt.Printf("执行任务,当前时间:%v\n", time.Now().Format("2006-01-02 15:04:05"))
// DO JOB.
// 重置定时器设置为1小时后再次触发
timer.Reset(time.Hour)
}
}
}