1.3 KiB
1.3 KiB
生产一键部署脚本忽略 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>进程不会再阻塞新后端启动