f07bbbc49d16ba6c73735eb8fb0c425c9d1b6384
- RESTART 命令优先通过 nssm restart 重启主程序服务(假死场景可用),未配置服务名回退环回 HTTP - nssm 输出按 UTF-16 解码并记录日志,权限不足时提示需以服务方式运行 - 环回管理接口 code=3001 时明确报鉴权失败,不再误报不可达 - 新增 nssm.path / main.service.name / log.dir 配置项 - 增加文件日志(RotatingFileHandler 5MB×5),服务方式运行可查日志 - HTTP 调用失败与状态码异常统一 WARNING 记录(原 DEBUG 不可见) - 断线日志区分「网络不通」与「被服务器拒绝(未注册/token 错误)」 - 连接 URL 自动拼接 device.id,消除双处配置不一致 Co-Authored-By: Claude <noreply@anthropic.com>
hospital-front-agent(Python 版)
医院前置机被控端 Agent,从 hospital-front(Kotlin/Java)拆出的独立 Python 实现。
职责
- WebSocket 主动连接 B 端管理服务器(注册 / 心跳 / 接收命令)
- 守护主程序(健康探测 + 宕机自动拉起 + 告警)
- 远程运维命令:健康查询、版本查询、日志查看(尾部 + 实时流)、配置读写、优雅重启、在线升级(含自动回滚)
与 Java 版的消息协议完全一致,B 端无需任何修改。
目录结构
hospital-front-agent/
├── agent/
│ ├── main.py # 入口:组装、PID 文件、信号处理
│ ├── config.py # conf/agent.properties + AGENT_ 环境变量
│ ├── ws_client.py # WS 客户端:注册/心跳/指数退避重连
│ ├── dispatcher.py # 命令分发(10 种命令)
│ ├── main_app_client.py # 环回 HTTP 调主程序 /api/admin
│ ├── process_guard.py # 看门狗:3 次失败拉起、告警
│ ├── log_stream.py # 日志实时流:2s 增量轮询、滚动检测
│ └── upgrade.py # 升级 SOP:下载→校验→备份→停→替换→拉起→健康检查→回滚
├── conf/agent.properties # 配置示例
└── requirements.txt
运行
依赖 Python 3.10+。
pip install -r requirements.txt
python -m agent.main
工作目录须与主程序部署根目录一致(bin/、pid/、tmp/、backup/ 所在目录),
配置默认从 conf/agent.properties 读取。
配置
见 conf/agent.properties。优先级:环境变量(AGENT_SERVER_URL 等) > properties > 默认值。
打包(PyInstaller 单 exe)
pip install pyinstaller
pyinstaller --onefile --name hospital-agent --paths . agent/main.py
产物 dist/hospital-agent.exe,拷贝到部署根目录 bin/ 下即可。
Windows 服务注册(NSSM 示例)
nssm install HospitalAgent "C:\hospital\bin\hospital-agent.exe"
nssm set HospitalAgent AppDirectory "C:\hospital"
nssm set HospitalAgent AppStdout "C:\hospital\logs\agent-out.log"
nssm set HospitalAgent AppStderr "C:\hospital\logs\agent-err.log"
与 Java 版的差异
- Agent 为独立 Python 进程,不再占用
bin/hospital-front.jar, 升级替换 jar 时无需维护 Agent jar 副本(Java 版遗留的hospital-agent.jar复制逻辑已移除)。 - 其余命令协议、升级 SOP、看门狗策略、日志流算法均与 Java 版等价。
Languages
Python
100%