docs:补充 18112 进程判读与 serve.py 需重启的规则
起因:同步 gmweb 时看到 18112 被占,先判断成「启动器在跑」、又改口成「残留 pythonw serve.py」,两次都错 —— 实际是多调用模式下的 gmweb 子进程,进程名就叫 DNF90启动器.exe。 - 排查文档新增小节「18112 上跑的可能是启动器本身」:给出命令行三态判别表 (带 serve.py 参数 = gmweb 服务 / 只有 exe 路径且占 19527 = 主进程 / 父 pid 不存在 = 遗留服务),并附 Get-CimInstance 取证命令 - 明确推论:该进程跑的是启动那一刻的 serve.py;静态文件读盘即生效, 但路由不会,症状是「页面新版、接口旧版,按钮点了没反应」 - AGENTS.md 8.3 同步补上「改 serve.py 后必须让 18112 进程重启」的部署动作
This commit is contained in:
1 parent
90877233fd
commit
0897761c47
2 files changed
+34
No files matched your search
@@ -263,6 +263,11 @@ git push origin main # ③ 推
|
|||||||
仓库改了,`Z:\90server` 和桌面补丁包**还是旧的**(见 R3)。凡是改了 `gmweb/`、启动器或客户端的提交,
|
仓库改了,`Z:\90server` 和桌面补丁包**还是旧的**(见 R3)。凡是改了 `gmweb/`、启动器或客户端的提交,
|
||||||
推完要:同步部署副本 → `diff -rq` 核对 → 该重打包的重打包 → 通知实际在玩的人重启启动器。
|
推完要:同步部署副本 → `diff -rq` 核对 → 该重打包的重打包 → 通知实际在玩的人重启启动器。
|
||||||
|
|
||||||
|
**改 `serve.py` 尤其要注意**:静态文件(`index.html` / `loadout.js` / `.css`)每次请求读盘、替换即生效,
|
||||||
|
但 `serve.py` 的路由是**进程启动时注册**的。抓 18112 的那个进程(进程名可能就叫 `DNF90启动器.exe`,
|
||||||
|
看命令行有没有 `serve.py --port 18112`)不重启,就会出现「页面是新版、接口是旧版」——
|
||||||
|
按钮点着没反应,最难查。所以:同步完先看 18112 是谁在听,该关就关,再重新打开启动器。
|
||||||
|
|
||||||
> 真实案例:`cc54603` 推了 gmweb 一键换装,但部署目录没同步,游戏里看不到新功能;
|
> 真实案例:`cc54603` 推了 gmweb 一键换装,但部署目录没同步,游戏里看不到新功能;
|
||||||
> 同时 18112 被一个残留 `serve.py` 占着,启动器看到端口已占用就跳过启动,
|
> 同时 18112 被一个残留 `serve.py` 占着,启动器看到端口已占用就跳过启动,
|
||||||
> 于是「改了、推了、也重启了,还是旧页面」(见 P-007、P-008)。
|
> 于是「改了、推了、也重启了,还是旧页面」(见 P-007、P-008)。
|
||||||
|
|||||||
@@ -121,6 +121,35 @@ DNF90启动器.exe probe.py # 旧版:hit.txt 不生成,却开出一个
|
|||||||
| `警告:注册表里没查到 WebView2 运行时` | 机器缺 Edge WebView2 Runtime,装一下即可(窗口会是空白) |
|
| `警告:注册表里没查到 WebView2 运行时` | 机器缺 Edge WebView2 Runtime,装一下即可(窗口会是空白) |
|
||||||
| 完全没有日志文件 | exe 所在目录不可写(如 Program Files),换目录或给写权限 |
|
| 完全没有日志文件 | exe 所在目录不可写(如 Program Files),换目录或给写权限 |
|
||||||
|
|
||||||
|
### 18112 上跑的可能是「启动器」本身,别被进程名骗了
|
||||||
|
|
||||||
|
多调用模式的代价:gmweb 子进程的**进程名就是 `DNF90启动器.exe`**,真实身份只在命令行里。
|
||||||
|
|
||||||
|
```
|
||||||
|
DNF90启动器.exe Z:\90server\gmweb\serve.py --port 18112
|
||||||
|
```
|
||||||
|
|
||||||
|
实际踩过:看到 18112 被占、进程名是启动器,先判断成「启动器在跑」,又找不到窗口可点
|
||||||
|
(父进程早退了、只剩这个子进程),于是改口成「残留的 `pythonw serve.py`」——两次都错了。
|
||||||
|
**名字不可靠,看命令行**:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -eq <pid> } |
|
||||||
|
Select-Object Name,ProcessId,ParentProcessId,CommandLine | Format-List
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令行特征 | 身份 |
|
||||||
|
|---|---|
|
||||||
|
| 带 `...\gmweb\serve.py --port 18112` | gmweb 服务进程(正常形态,父进程通常就是启动器) |
|
||||||
|
| 只有 exe 路径,且自己占着 `19527` | 启动器主进程 |
|
||||||
|
| 上面那条的 `ParentProcessId` 已不存在 | 父启动器退了,留下的是**遗留 gmweb 服务**(能继续用,但跑的是旧代码) |
|
||||||
|
|
||||||
|
> **关键推论:它跑的是「启动那一刻」的 `serve.py`。**
|
||||||
|
> 静态文件(`index.html` / `loadout.js` / `.css`)每次请求都读盘,替换后立即生效;
|
||||||
|
> 但 `serve.py` 的路由是进程启动时注册的,**替换文件不会生效**。
|
||||||
|
> 症状是「页面是新版(按钮都在),接口却是旧版(点了没反应 / 404)」。
|
||||||
|
> 所以同步过 `gmweb/` 之后,必须让占着 18112 的进程重启一次(关启动器 → 确认端口空了 → 重新打开)。
|
||||||
|
|
||||||
## 七、相关坑(顺带记录)
|
## 七、相关坑(顺带记录)
|
||||||
|
|
||||||
- **exe 名字带中文**没问题,日志和 WebView2 目录都能正常处理;但 exe 放在**只读目录**会让日志与 WebView2 同时失效,表现就是「能开窗口但空白、也没有日志」。
|
- **exe 名字带中文**没问题,日志和 WebView2 目录都能正常处理;但 exe 放在**只读目录**会让日志与 WebView2 同时失效,表现就是「能开窗口但空白、也没有日志」。
|
||||||
|
|||||||
Reference in new issue
Block a user