31 lines
1.3 KiB
Markdown
31 lines
1.3 KiB
Markdown
|
|
# 生产一键部署脚本忽略 defunct 进程实施记录
|
||
|
|
|
||
|
|
## 问题现象
|
||
|
|
- 执行部署脚本时出现报错:
|
||
|
|
- `检测到后端已在运行,请先停止旧进程`
|
||
|
|
|
||
|
|
## 根因分析
|
||
|
|
- 当前脚本使用 `ps -ef` 收集托管后端进程
|
||
|
|
- 简化后的实现只要在 `ps -ef` 中匹配到:
|
||
|
|
- `-Dloan.pricing.home=<脚本目录>`
|
||
|
|
- `backend/ruoyi-admin.jar`
|
||
|
|
就会返回对应 PID
|
||
|
|
- 如果系统中存在已经退出但仍显示为 `<defunct>` 的历史 Java 进程,该 PID 也会被误判为“旧后端仍在运行”
|
||
|
|
- 随后 `start_backend()` 在启动前再次调用 `collect_backend_pids()`,因此会直接报“检测到后端已在运行,请先停止旧进程”
|
||
|
|
|
||
|
|
## 修改内容
|
||
|
|
- 更新 `bin/prod/deploy_from_package.sh`
|
||
|
|
- 在 `collect_backend_pids()` 中继续使用 `ps -ef`,但显式忽略包含 `<defunct>` 的进程行
|
||
|
|
- 更新 `bin/prod/deploy_from_package_test.sh`
|
||
|
|
- 新增自测场景:
|
||
|
|
- `ps -ef` 输出中存在匹配当前脚本标记和 jar 路径的 `<defunct>` 进程
|
||
|
|
- 脚本应忽略该记录并继续正常部署
|
||
|
|
|
||
|
|
## 验证结果
|
||
|
|
- 已执行 `sh -n bin/prod/deploy_from_package.sh`
|
||
|
|
- 已执行 `sh bin/prod/deploy_from_package_test.sh`
|
||
|
|
- 自测结果确认:
|
||
|
|
- 正常部署链路通过
|
||
|
|
- 多个发布 zip 失败场景通过
|
||
|
|
- `<defunct>` 进程不会再阻塞新后端启动
|