diff --git a/core/task_manager.py b/core/task_manager.py index bfccbf2..76072fa 100644 --- a/core/task_manager.py +++ b/core/task_manager.py @@ -587,14 +587,10 @@ class TaskManager: return _next_run_time(job.schedule) def run_job_now(self, job_id): - """立即执行任务(手动触发)。运行窗口外拒绝启动。""" + """立即执行任务(手动触发)。运行窗口只约束定时触发,手动执行不受限制。""" job = self.jobs.get(job_id) if not job: return {"ok": False, "error": "任务不存在"} - if not _in_run_window(job.schedule): - win = job.schedule.get("window") or {} - return {"ok": False, - "error": f"当前不在运行窗口内({win.get('start', '')}-{win.get('end', '')}),任务未启动"} # 在独立线程跑,不阻塞调用方 t = threading.Thread(target=self._run_job, args=(job,), daemon=True) t.start() diff --git a/static/admin/editor.js b/static/admin/editor.js index f58b12a..82b3b1b 100644 --- a/static/admin/editor.js +++ b/static/admin/editor.js @@ -1082,7 +1082,7 @@ async function saveTask(jobId){ cron:buildCronFromFreq(), stop_cron:(parseInt(st[1])||0)+' '+(parseInt(st[0])||0)+' * * *'}; } - // 运行窗口:窗口外(定时触发 + 手动执行)不启动 + // 运行窗口:只约束定时触发(窗口外定时不启动),手动执行不受限制 if(document.getElementById('f-window_enable').checked){ schedule.window={ start:document.getElementById('f-window_start').value||'09:00', diff --git a/static/admin/tasks.js b/static/admin/tasks.js index f652d07..e48a696 100644 --- a/static/admin/tasks.js +++ b/static/admin/tasks.js @@ -141,7 +141,7 @@ function openTaskModal(jobId){ '
'+ '
'+ ''+ - '
窗口外任务不会启动(定时触发和手动执行都受约束)。跨午夜示例:21:00-09:00 = 晚 9 点到次日早 9 点允许运行
'+ + '
窗口只约束定时触发:窗口外定时不会启动,手动执行不受限制。跨午夜示例:21:00-09:00 = 晚 9 点到次日早 9 点允许运行
'+ '
'+ '
'+ '
'+