fix: 手动执行不再受运行窗口限制(窗口只约束定时触发)——立即执行按钮在窗口外也可触发任务

This commit is contained in:
2026-08-20 08:36:29 +08:00
parent 0fab6f4de8
commit 27530ff5ac
3 changed files with 3 additions and 7 deletions
+1 -5
View File
@@ -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()
+1 -1
View File
@@ -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',
+1 -1
View File
@@ -141,7 +141,7 @@ function openTaskModal(jobId){
'<div class="form-group"><label>允许运行·开始</label><input type="time" class="form-control" id="f-window_start" value="'+esc(winStart)+'"></div>'+
'<div class="form-group"><label>允许运行·结束</label><input type="time" class="form-control" id="f-window_end" value="'+esc(winEnd)+'"></div>'+
'</div>'+
'<div class="help" id="f-window_help" style="display:'+(win?'block':'none')+'">窗口外任务不会启动(定时触发和手动执行都受约束)。跨午夜示例:21:00-09:00 = 晚 9 点到次日早 9 点允许运行</div>'+
'<div class="help" id="f-window_help" style="display:'+(win?'block':'none')+'">窗口只约束定时触发:窗口外定时不会启动,手动执行不受限制。跨午夜示例:21:00-09:00 = 晚 9 点到次日早 9 点允许运行</div>'+
'<div class="form-row">'+
'<div class="form-group"><label>重试次数</label><input type="number" class="form-control" id="f-retry_attempts" value="'+j.retry.max_attempts+'" min="1" max="10"></div>'+
'<div class="form-group"><label>重试间隔(秒)</label><input type="number" class="form-control" id="f-retry_delay" value="'+j.retry.delay+'" min="10" max="3600"></div>'+