package job import ( "91porn-server/common" "91porn-server/common/aiService" "91porn-server/common/log" mediaService "91porn-server/common/media" "91porn-server/common/mediaCenter" "91porn-server/models/commod" "91porn-server/skd/job/checkin" "91porn-server/skd/job/dailyAdverCalc" "91porn-server/skd/job/dataclean" "91porn-server/skd/job/hotvalue" "91porn-server/skd/job/shortrecommend" "91porn-server/skd/job/user" "91porn-server/skd/service" "91porn-server/skd/service/contentreviewser" "91porn-server/skd/service/export_task" "91porn-server/skd/skdg" "context" "time" ) // start 定时任务 开启 func start() { _, _ = statCron.AddFunc("0 0 0 * * ?", func() { //每天0点执行一次 // 重置预售卡预付权益 user.ResetLimit() }) if skdg.Conf.ShortRecommendEnabled() { // 定时检查队列完整性;当天健康时只做一次Redis脚本,异常时自动重建。 if _, err := statCron.AddFunc(skdg.Conf.ShortRecommendCron(), shortrecommend.Run); err != nil { log.Error("register short recommend cron failed", log.E(err), log.Any("cron", skdg.Conf.ShortRecommendCron())) } // 启动时补建当日队列;分布式锁保证多实例只执行一次。 common.Go(shortrecommend.Run) } _, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟执行一次统计任务 runStat() }) _, _ = statCron.AddFunc("@every 5m", func() { //每5分钟执行一次数据同步任务 runSync() }) _, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟执行一次sql折叠任务 runSyncSqlcollaspe() }) // _, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟刷新一下排行榜 // runRankStat() // }) // _, _ = statCron.AddFunc("0 0/1 * * * ?", func() { //每1分钟执行一次统计任务 // runPromoteStat() // }) // _, _ = statCron.AddFunc("0 0 0/1 * * ?", func() { //每1个小时增加内部人员推广人数 // runInnerFakePromote() // }) // _, _ = statCron.AddFunc("0 0/2 * * * ?", func() { //每2分钟生成备用推广码 // runMakePromotionCode() // }) // _, _ = statCron.AddFunc("0 0 0,1,3,6,7,9,10,12,15,20,21,23 * * ?", func() { //每天11,15,18,23点执行一次消息任务 // service.GoldEggLuckyRunSync() // }) _, _ = statCron.AddFunc("0 0 4 * * ?", func() { //每天凌晨4点执行一次 dataclean.RunSync() }) _, _ = statCron.AddFunc("0/10 * * * * ?", func() { //每10秒执行一次 service.VidTimeOnline() }) common.Go(func() { hotvalue.ResetHot() }) _, _ = statCron.AddFunc("0 0 6 * * ?", func() { //每天凌晨6点执行一次 hotvalue.ResetHot() }) // 每10秒检测需要导出的任务列表 _, _ = statCron.AddFunc("0/10 * * * * ?", func() { //每10秒执行一次 export_task.ExecExportTask() }) // 每3秒检测有无待执行的内容审查任务(同一时刻仅 1 个任务运行) _, _ = statCron.AddFunc("0/3 * * * * ?", func() { contentreviewser.TryRunPendingTask() }) _, _ = statCron.AddFunc("0 * * * * ?", func() { // 每分钟检查是否需要发送 IM 广告通知 IMAdNotifyOnline() }) // 每 5 秒检查 web 端是否发起了 IM 用户同步请求 _, _ = statCron.AddFunc("0/5 * * * * ?", func() { RunPendingSyncIMUsers() }) // 同步acg订阅的动漫 _, _ = statCron.AddFunc("0 0/30 * * * ?", func() { //每30分钟执行一次 ms := mediaService.NewMediaSync(skdg.Redis, mediaCenter.NewMediaCenterService(mediaCenter.Config{ Url: skdg.Conf.MediaResourcesCfg.UploadMediaUrl, ProId: skdg.Conf.MediaResourcesCfg.ProId, Secret: skdg.Conf.MediaResourcesCfg.AppSecret, })) ms.SyncAll("系统") }) common.Go(func() { err := aiService.NewAiService( aiService.AppId(int(commod.KFK_APPID)), aiService.Url(skdg.Conf.Url.AiServer), aiService.Redis(skdg.Redis), ).Sync() if err != nil { log.Error("Sync AI Template fail") } }) // 定期同步ai服务里的模版 _, _ = statCron.AddFunc("0 0/10 * * * ?", func() { //每10分钟执行一次 err := aiService.NewAiService( aiService.AppId(int(commod.KFK_APPID)), aiService.Url(skdg.Conf.Url.AiServer), aiService.Redis(skdg.Redis), ).Sync() if err != nil { log.Error("Sync AI Template fail") } }) _, _ = statCron.AddFunc("0/2 * * * * ?", func() { //每2秒检查签到奖励视频切片状态 checkin.VideoCheckRS() }) _, _ = statCron.AddFunc("0 0/1 * * * ?", func() { // 每分钟提交 H265 等待队列 SubmitH265TranscodingQueue() }) _, _ = statCron.AddFunc("0 0/1 * * * ?", func() { // 每分钟轮询 H265 转码结果 CheckH265TranscodingResults() }) _, _ = statCron.AddFunc("0 0 0/1 * * ?", func() { // 每小时保障首页重点视频的 H265 资源 ScanHomeH265TranscodingQueue() }) common.Go(func() { ScanHomeH265TranscodingQueue() SubmitH265TranscodingQueue() CheckH265TranscodingResults() }) spec := "0 0/30 * * * ?" if skdg.Conf.Base.Env == "test" { spec = "0 0/1 * * * ?" // 测试环境3分钟刷新一次 } _, _ = statCron.AddFunc(spec, func() { //每30分钟执行一次 now := time.Now() if now.Hour() == 0 || now.Hour() == 1 || now.Hour() == 2 { yesterday := now.AddDate(0, 0, -1) if err := dailyAdverCalc.CalcRetention(context.Background(), yesterday); err != nil { log.Error("CalcRetention failed", log.Any("error", err)) } } // 当天的数据,每小时计算一次,确保及时更新看板 if err := dailyAdverCalc.CalcRetention(context.Background(), now); err != nil { log.Error("CalcRetention failed", log.Any("error", err)) } }) statCron.Start() }