Skip to content

scheduler 端口 45762 与 Windows 动态端口范围冲突,导致启动失败 #331

@slowlyo

Description

@slowlyo

问题描述

scheduler 启动时尝试绑定端口 45762,但该端口落在 Windows 系统保留的动态端口范围内,被系统进程占用,导致绑定失败抛出 WinError 10013

运行环境

  • OS: Windows 10/11
  • Python: 3.12

复现步骤

  1. 在 Windows 上执行 netsh int ipv4 show dynamicport tcp,查看动态端口起始值
  2. 若 45762 落在该范围内,scheduler 启动时会报错
  3. 启动 GenericAgent,日志中可观察到 WinError 10013

根因

reflect/scheduler.py 中硬编码了端口 45762 作为调度器的锁端口。Windows 默认动态端口从 49152 起,但管理员可通过 netsh 将起始值调低,导致 45762 被纳入动态分配范围并被系统进程占用,从而触发 WinError 10013(地址已被占用 / 权限被拒绝)。

建议修复

  1. 将端口改为可配置(环境变量或配置文件)
  2. 默认使用更安全的端口范围(如 19000-20000)
  3. 增加回退逻辑:端口占用时自动尝试下一个可用端口
  4. 或改用文件锁替代端口锁,避免端口依赖

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions