From 252f0f986f407acc9b4970144e493c7dcce985ae Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 17 Aug 2026 13:33:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(scheduler):=20=E6=81=A2=E5=A4=8D=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=B8=85=E7=90=86=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 4b1df72a 移除了 clear_cache 的 add_job 调用但保留了 _jobs 定义, 导致任务在 UI 中不可见、无法手动执行。现以固定 24 小时间隔重新注册, 不再绑定 META_CACHE_EXPIRE。 --- app/scheduler.py | 10 ++++++++++ tests/test_scheduler_cache_expiry.py | 11 ++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/scheduler.py b/app/scheduler.py index 342b1950c..7306ea0cd 100644 --- a/app/scheduler.py +++ b/app/scheduler.py @@ -682,6 +682,16 @@ class Scheduler(ConfigReloadMixin, metaclass=SingletonClass): kwargs={"job_id": "scheduler_job"}, ) + # 缓存清理服务 + self._scheduler.add_job( + self.start, + "interval", + id="clear_cache", + name="缓存清理", + hours=24, + kwargs={"job_id": "clear_cache"}, + ) + # 数据表清理服务,每天凌晨执行一次 if settings.DATA_CLEANUP_ENABLE: self._scheduler.add_job( diff --git a/tests/test_scheduler_cache_expiry.py b/tests/test_scheduler_cache_expiry.py index 1fa26d763..9566a160c 100644 --- a/tests/test_scheduler_cache_expiry.py +++ b/tests/test_scheduler_cache_expiry.py @@ -45,8 +45,8 @@ def test_scheduler_initializer_starts_background_jobs(monkeypatch): scheduler.init.assert_called_once_with() -def test_meta_cache_expire_does_not_schedule_bulk_cache_clear(monkeypatch): - """单条缓存 TTL 不应再被用于注册整批缓存清理任务。""" +def test_meta_cache_expire_does_not_control_cache_clear_interval(monkeypatch): + """缓存清理任务应使用固定间隔,不受 META_CACHE_EXPIRE 控制。""" background_scheduler = _BackgroundSchedulerStub() generic_chain = Mock() for name in [ @@ -98,6 +98,11 @@ def test_meta_cache_expire_does_not_schedule_bulk_cache_clear(monkeypatch): scheduler.init() scheduled_job_ids = {job["id"] for job in background_scheduler.jobs} - assert "clear_cache" not in scheduled_job_ids + assert "clear_cache" in scheduled_job_ids assert "clear_cache" in scheduler._jobs + # 缓存清理使用固定 24 小时间隔,不受 META_CACHE_EXPIRE 控制 + clear_cache_job = next( + job for job in background_scheduler.jobs if job["id"] == "clear_cache" + ) + assert clear_cache_job["hours"] == 24 assert background_scheduler.started is True