feat: 悬空设备自愈 - 启动可选自动释放残留 STF 占用

崩溃/强杀后设备残留占用需手动清理。新增 AUTO_RELEASE_STALE_OCCUPY 配置
(默认关):单实例部署设为 true 时,web_server 启动自动释放本账户残留占用;
多实例共用 STF 账户时勿开(会误放另一实例任务)。默认仅启动提示。
This commit is contained in:
2026-08-08 21:31:53 +08:00
parent 838886e043
commit 02016b7b85
3 changed files with 19 additions and 6 deletions
+11 -5
View File
@@ -729,17 +729,23 @@ def _run_server(host, port):
if __name__ == "__main__":
from config import WEB_HOST, WEB_PORT
from config import WEB_HOST, WEB_PORT, AUTO_RELEASE_STALE_OCCUPY
# 自动启动 uiautodev 服务(元素抓取功能依赖,端口 20242)
_ensure_uiauto_running()
# 启动时提示可能残留的 STF 占用(上次异常退出/强杀遗留)。
# 不自动释放:本机与生产可能是多实例共用一个 STF 账户,误放会中断另一实例的任务。
# 启动时处理可能残留的 STF 占用(上次异常退出/强杀遗留)。
# AUTO_RELEASE_STALE_OCCUPY=True(单实例)时自动释放;否则仅提示。
# 多实例共用一个 STF 账户时不要开启,误放会中断另一实例的任务。
try:
_mine = stf.list_my_devices()
if _mine:
_serials = ", ".join(d["serial"] for d in _mine)
_log.warning(f"启动时发现 {len(_mine)} 台设备仍被本账户占用(可能异常退出残留):{_serials}。"
f"确认无其他实例在跑时可用\"强制释放占用\"清理")
if AUTO_RELEASE_STALE_OCCUPY:
_log.warning(f"启动时发现 {len(_mine)} 台设备残留占用,自动释放(AUTO_RELEASE_STALE_OCCUPY=True):{_serials}")
_released, _failed = stf.release_all_mine()
_log.info(f"自动释放完成:成功 {len(_released)} 台,失败 {len(_failed)} 台")
else:
_log.warning(f"启动时发现 {len(_mine)} 台设备仍被本账户占用(可能异常退出残留):{_serials}。"
f"单实例无人值守可设 AUTO_RELEASE_STALE_OCCUPY=True 自动清理")
except Exception:
pass
_log.info(f"管理后台: http://localhost:{WEB_PORT}/ (admin/admin123)")