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