fix(ci): 定时任务防僵尸——urlopen补超时+扫描墙钟上限+降频 [P0] #1561
Reference in New Issue
Block a user
Delete Branch "ci/fix-scheduled-jobs-zombie-timeout"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
2026-08-30 CI 巡检发现 P0 级僵尸任务:
pr-auto-scan定时任务(run 42545 / task 131462)卡死 195 分钟,容器内进程阻塞在urllib.request.urlopen()——该调用没有 timeout 参数,网络异常时永久挂起;而 Gitea 1.26.4 的timeout-minutes: 5对卡死 job 不生效,runner slot 被白白占用。改动
1.
scripts/ci/pr_auto_scan.py(根因修复)api_request()的urlopen加 timeout=15s,并捕获URLError / socket.timeout / TimeoutError / OSError(返回 599,调用方按失败处理,绝不永久挂起)--max-wall-seconds参数(默认 240s):整次扫描墙钟自保,到点主动退出,剩余 PR 下次调度继续处理(Gitea timeout 不可靠,脚本自己兜底)merge_pr()的time.sleep(30)改为 2s 粒度可中断等待,墙钟到点立即退出2.
scripts/ci/acr_cleanup.py/scripts/ci/auto_fix_formatting.py(同款隐患一并修)urlopen同样无 timeout:acr_cleanup 7 处(补 30s,生产镜像清理链路)、auto_fix_formatting 5 处(补 15s)3. 定时工作流降频(
.gitea/workflows/)pr-auto-scan.yml/ci-trigger-monitor.yml的 schedule 从*/5降到*/10影响面
后续
timeout-minutes可恢复兜底,脚本侧自保保留不冲突🤖 Generated by [构建服务器运维] agent
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
20a356e7d8toe58c45af64e58c45af64to8a276dc6f98a276dc6f9tob021f56e16b021f56e16to3bc850dc0f代码审查结果 - PR #1561
⚠️ 问题(0个需要修改)
无
💡 建议(1个可选)
socket.timeout是OSError的子类(在Python 3.3+中),因此捕获OSError已包含socket.timeout。虽然显式列出两者无副作用且可读性尚可,但略显冗余,可考虑仅保留OSError。✅ 格式检查通过 | ✅ 逻辑审查需修改 | ✅ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 03:37:19 | 模型:
🗑️ 预览环境已清理
PR #1561 已关闭或合并,对应的预览环境已被清理。