scheduler.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package scheduler
  2. import (
  3. "context"
  4. "log"
  5. "time"
  6. "github.com/robfig/cron/v3"
  7. "go.uber.org/zap"
  8. "fwh-toolbox-server/services"
  9. )
  10. func Init() *cron.Cron {
  11. c := cron.New()
  12. // UTC时间 23点55分 定时任务
  13. c.AddFunc("CRON_TZ=UTC 0 23 * * *", func() {
  14. log.Println("run at UTC midnight:", time.Now().UTC())
  15. log.Println("run at Local midnight:", time.Now())
  16. // SIM卡每日信息更新任务
  17. // err := task.CreateTaskSimCardCollect()
  18. // if err != nil {
  19. // zap.L().Error("CreateTaskSimCardCollect failed.", zap.String("err", err.Error()), zap.String("time(UTC)", time.Now().UTC().Format(time.DateTime)))
  20. // }
  21. })
  22. // c.AddFunc("@every 1h", func() {
  23. // log.Println("每小时任务执行")
  24. // // do job
  25. // })
  26. c.AddFunc("30 10 * * *", func() {
  27. log.Println("每天10:30任务执行")
  28. // do job
  29. })
  30. c.AddFunc("10 12 * * *", func() {
  31. log.Println("每天12:10任务执行")
  32. // do job
  33. })
  34. // 告警统计任务,每天上午5点
  35. c.AddFunc("0 5 * * *", func() {
  36. log.Println("告警统计任务,每天5:00任务执行")
  37. // do job
  38. })
  39. // 每天 14:00 执行一次
  40. // robfig/cron 默认支持 6 字段:秒 分 时 日 月 星期
  41. // "0 0 14 * * *" 秒=0, 分=0, 时=14,每天执行
  42. c.AddFunc("35 15 * * *", func() {
  43. log.Println("每天 15:35 执行Shutdown统计")
  44. // 获取当前时间
  45. // now := time.Now()
  46. // 计算前天(往前两天)
  47. // beforeYesterday := now.AddDate(0, 0, -2)
  48. // 格式化为字符串(按 yyyy-MM-dd)
  49. // beforeYesterdayStr := beforeYesterday.Format(time.DateOnly)
  50. // TODO 暂停每日任务
  51. // taskQueue.EnqueueShutdownStatisticsTask(domain.TaskShutdownStatistics{
  52. // Date: beforeYesterdayStr,
  53. // })
  54. })
  55. c.AddFunc("@every 1h", func() {
  56. if err := services.CleanupDataDownloadPackages(context.Background()); err != nil {
  57. zap.L().Error("DataDownload package cleanup failed", zap.String("err", err.Error()))
  58. }
  59. if err := services.CleanupDataDownloadArtifacts(context.Background()); err != nil {
  60. zap.L().Error("DataDownload artifact cleanup failed", zap.String("err", err.Error()))
  61. }
  62. })
  63. c.Start()
  64. // 打印任务计划表
  65. entries := c.Entries()
  66. var entriesStr []string
  67. for _, i := range entries {
  68. entriesStr = append(entriesStr, i.Next.Format(time.DateTime))
  69. }
  70. zap.L().Debug("cron entries", zap.Any("entries", entriesStr))
  71. return c
  72. }