From 982d996e89c8c9d005ddac3505c8b779e3c51dba Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Fri, 9 Oct 2026 21:30:03 +0200 Subject: [PATCH] fix cron timezone #1648 --- web/entity/entity.go | 4 ++++ web/web.go | 15 ++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/web/entity/entity.go b/web/entity/entity.go index de157162..2bec0398 100644 --- a/web/entity/entity.go +++ b/web/entity/entity.go @@ -135,6 +135,10 @@ func (s *AllSetting) CheckValid() error { return err } + if _, err := cronspec.Parse(s.TgRunTime); err != nil { + return err + } + _, err := time.LoadLocation(s.TimeLocation) if err != nil { return common.NewError("time location not exist:", s.TimeLocation) diff --git a/web/web.go b/web/web.go index 5f196fd2..82319487 100644 --- a/web/web.go +++ b/web/web.go @@ -280,14 +280,19 @@ func (s *Server) startTask() { if (err == nil) && (isTgbotenabled) { runtime, err := s.settingService.GetTgbotRuntime() if err != nil || runtime == "" { - logger.Errorf("Add NewStatsNotifyJob error[%s], Runtime[%s] invalid, will run default", err, runtime) + logger.Errorf("Add NewStatsNotifyJob error[%v], Runtime[%s] invalid, will run default", err, runtime) runtime = "@daily" } - logger.Infof("Tg notify enabled,run at %s", runtime) - _, err = s.cron.AddJob(runtime, job.NewStatsNotifyJob()) + // The scheduler's own parser demands a seconds field, so hand it the + // schedule already parsed to accept standard five-field crontab too. + schedule, err := cronspec.Parse(runtime) if err != nil { - logger.Warning("Add NewStatsNotifyJob error", err) - return + logger.Warning("Add NewStatsNotifyJob error, will run default:", err) + schedule, _ = cronspec.Parse("@daily") + } + if schedule != nil { + logger.Infof("Tg notify enabled,run at %s", runtime) + s.cron.Schedule(schedule, job.NewStatsNotifyJob()) } // Check CPU load and alarm to TgBot if threshold passes