diff --git a/cmd/web/wire_gen.go b/cmd/web/wire_gen.go index 6b88c8590a..536bc51e75 100644 --- a/cmd/web/wire_gen.go +++ b/cmd/web/wire_gen.go @@ -144,7 +144,7 @@ func initWeb() (*app.Web, error) { return nil, err } gormigrate := bootstrap.NewMigrate(db) - jobs := job.NewJobs(db, logger, settingRepo, certRepo, backupRepo, cacheRepo) + jobs := job.NewJobs(db, logger, settingRepo, certRepo, backupRepo, cacheRepo, taskRepo) cron, err := bootstrap.NewCron(koanf, logger, jobs) if err != nil { return nil, err diff --git a/internal/job/job.go b/internal/job/job.go index 7e23b53efd..785b48d4c5 100644 --- a/internal/job/job.go +++ b/internal/job/job.go @@ -19,9 +19,10 @@ type Jobs struct { cert biz.CertRepo backup biz.BackupRepo cache biz.CacheRepo + task biz.TaskRepo } -func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.CertRepo, backup biz.BackupRepo, cache biz.CacheRepo) *Jobs { +func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.CertRepo, backup biz.BackupRepo, cache biz.CacheRepo, task biz.TaskRepo) *Jobs { return &Jobs{ db: db, log: log, @@ -29,6 +30,7 @@ func NewJobs(db *gorm.DB, log *slog.Logger, setting biz.SettingRepo, cert biz.Ce cert: cert, backup: backup, cache: cache, + task: task, } } @@ -40,7 +42,7 @@ func (r *Jobs) Register(c *cron.Cron) error { return err } - if _, err := c.AddJob("0 2 * * *", NewPanelTask(r.db, r.log, r.backup, r.cache, r.setting)); err != nil { + if _, err := c.AddJob("0 2 * * *", NewPanelTask(r.db, r.log, r.backup, r.cache, r.task, r.setting)); err != nil { return err } diff --git a/internal/job/panel_task.go b/internal/job/panel_task.go index aeb50ea99b..326542908e 100644 --- a/internal/job/panel_task.go +++ b/internal/job/panel_task.go @@ -23,16 +23,18 @@ type PanelTask struct { log *slog.Logger backupRepo biz.BackupRepo cacheRepo biz.CacheRepo + taskRepo biz.TaskRepo settingRepo biz.SettingRepo } -func NewPanelTask(db *gorm.DB, log *slog.Logger, backup biz.BackupRepo, cache biz.CacheRepo, setting biz.SettingRepo) *PanelTask { +func NewPanelTask(db *gorm.DB, log *slog.Logger, backup biz.BackupRepo, cache biz.CacheRepo, task biz.TaskRepo, setting biz.SettingRepo) *PanelTask { return &PanelTask{ api: api.NewAPI(app.Version), db: db, log: log, backupRepo: backup, cacheRepo: cache, + taskRepo: task, settingRepo: setting, } } @@ -100,6 +102,10 @@ func (r *PanelTask) updateRewrites() { // 更新面板 func (r *PanelTask) updatePanel() { + if r.taskRepo.HasRunningTask() { + return + } + // 加 300 秒确保在缓存更新后才更新面板 time.AfterFunc(time.Duration(rand.IntN(300))*time.Second+300*time.Second, func() { panel, err := r.api.LatestVersion()