package scheduler import ( "log" "time" "github.com/robfig/cron/v3" "go.uber.org/zap" "fwh-toolbox-server/utils/agentfiles" ) func Init() *cron.Cron { c := cron.New() // UTC时间 23点55分 定时任务 c.AddFunc("CRON_TZ=UTC 0 23 * * *", func() { log.Println("run at UTC midnight:", time.Now().UTC()) log.Println("run at Local midnight:", time.Now()) // SIM卡每日信息更新任务 // err := task.CreateTaskSimCardCollect() // if err != nil { // zap.L().Error("CreateTaskSimCardCollect failed.", zap.String("err", err.Error()), zap.String("time(UTC)", time.Now().UTC().Format(time.DateTime))) // } }) // c.AddFunc("@every 1h", func() { // log.Println("每小时任务执行") // // do job // }) c.AddFunc("30 10 * * *", func() { log.Println("每天10:30任务执行") // do job }) c.AddFunc("10 12 * * *", func() { log.Println("每天12:10任务执行") // do job }) // 告警统计任务,每天上午5点 c.AddFunc("0 5 * * *", func() { log.Println("告警统计任务,每天5:00任务执行") // do job }) // 每天 14:00 执行一次 // robfig/cron 默认支持 6 字段:秒 分 时 日 月 星期 // "0 0 14 * * *" 秒=0, 分=0, 时=14,每天执行 c.AddFunc("35 15 * * *", func() { log.Println("每天 15:35 执行Shutdown统计") // 获取当前时间 // now := time.Now() // 计算前天(往前两天) // beforeYesterday := now.AddDate(0, 0, -2) // 格式化为字符串(按 yyyy-MM-dd) // beforeYesterdayStr := beforeYesterday.Format(time.DateOnly) // TODO 暂停每日任务 // taskQueue.EnqueueShutdownStatisticsTask(domain.TaskShutdownStatistics{ // Date: beforeYesterdayStr, // }) }) // 每小时清理 MCP Agent 本地落盘目录(/tmp/fwh-toolbox-agent 下 results/、downloads/) // 中 mtime 超过 24h 的过期文件。MCP 是本机子进程、与后端共享 /tmp,故可在此统一清理。 // 与 MCP 进程启动时的清理(A 方案)互为补充,覆盖长期不重启的常驻场景。 c.AddFunc("@every 1h", func() { res := agentfiles.Cleanup(agentfiles.DefaultMaxAge) zap.L().Debug("agent 落盘目录清理", zap.Int("scanned", res.Scanned), zap.Int("removed", res.Removed), zap.Int("failed", res.Failed), zap.Int64("freedBytes", res.Freed), ) }) c.Start() // 打印任务计划表 entries := c.Entries() var entriesStr []string for _, i := range entries { entriesStr = append(entriesStr, i.Next.Format(time.DateTime)) } zap.L().Debug("cron entries", zap.Any("entries", entriesStr)) return c }