56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package cmd
|
||
|
||
import (
|
||
"fmt"
|
||
"framework_v2/internal/providers"
|
||
"github.com/spf13/cobra"
|
||
|
||
"time"
|
||
)
|
||
|
||
var scheduleCommand = &cobra.Command{
|
||
Use: "schedule",
|
||
|
||
Run: func(cmd *cobra.Command, args []string) {
|
||
providers.InitConfig()
|
||
providers.InitLogger()
|
||
providers.InitEnt()
|
||
providers.InitRedis()
|
||
providers.InitAsynQClient()
|
||
|
||
runSchedule()
|
||
},
|
||
}
|
||
|
||
func runSchedule() {
|
||
|
||
if providers.Config.DebugMode.Enable {
|
||
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)
|
||
}
|
||
}
|
||
}
|