| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package scheduler
- import (
- "context"
- "log"
- "time"
- "github.com/robfig/cron/v3"
- "go.uber.org/zap"
- "fwh-toolbox-server/services"
- "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.AddFunc("@every 1h", func() {
- if err := services.CleanupDataDownloadPackages(context.Background()); err != nil {
- zap.L().Error("DataDownload package cleanup failed", zap.String("err", err.Error()))
- }
- if err := services.CleanupDataDownloadArtifacts(context.Background()); err != nil {
- zap.L().Error("DataDownload artifact cleanup failed", zap.String("err", err.Error()))
- }
- })
- 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
- }
|