daily_cron.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package tasks
  2. import (
  3. "app/commons/config"
  4. "app/commons/core"
  5. "app/tasks/daily_profit"
  6. "app/tasks/quota"
  7. "github.com/robfig/cron/v3"
  8. )
  9. var cronIsRunning = false
  10. func beginCron() bool {
  11. if cronIsRunning {
  12. return false
  13. }
  14. cronIsRunning = true
  15. return cronIsRunning
  16. }
  17. func endCron() {
  18. cronIsRunning = false
  19. }
  20. func RunDailyCron() {
  21. crontab := cron.New(cron.WithSeconds()) // 秒级定时任务
  22. dailyJobRule := "11 11 0 * * *"
  23. dailyJobCId, err := crontab.AddFunc(dailyJobRule, DailyTask)
  24. if err != nil {
  25. core.JobLog.Errorf("DailyTask:%s", err.Error())
  26. return
  27. }
  28. core.JobLog.Infof("DailyTask:%s DailyTask 启动成功cId:%d", dailyJobRule, dailyJobCId)
  29. // todo: 唤起k8s 健康检查http服务
  30. crontab.Run()
  31. }
  32. // 限制每日任务不可多任务同时进行
  33. func DailyTask() {
  34. if !beginCron() {
  35. core.JobLog.Infof("corn is running...")
  36. return
  37. }
  38. defer endCron()
  39. var err error
  40. // 指标处理
  41. err = quota.NewService().RunQuotaHandler()
  42. if err != nil {
  43. return
  44. }
  45. isTest := config.AppConf().Mod != config.ModEnvProd
  46. // 收益任务
  47. // false 当日任务 -- 用于正式
  48. // true 下一日任务 -- 用于手动测试
  49. err = daily_profit.NewService().RunDailyProfitJob(isTest)
  50. if err != nil {
  51. return
  52. }
  53. }