2.6 KiB
2.6 KiB
后端启停脚本停机范围收敛实施记录
修改目标
- 修复
bin/restart_java_backend.sh在执行stop/restart时可能误杀非脚本托管 Java 进程的问题 - 保持现有
java -jar ruoyi-admin.jar启动方式不变,仅收敛停机识别范围
根因分析
- 原脚本在
stop_backend()中通过collect_pids()同时合并以下来源后统一执行kill:logs/backend-java.pid中记录的 PID- 监听
62318端口的进程 - 命令行中包含
ruoyi-admin.jar关键字的进程
- 该逻辑会把“不是由本脚本拉起、但恰好占用端口或命中关键字”的外部进程也纳入停机列表,导致关闭后端时误杀其他进程。
修改内容
- 调整
bin/restart_java_backend.sh- 新增
APP_MARKER="-Dccdi.backend.root=$ROOT_DIR",启动时把仓库根路径标记写入 Java 启动参数 - 新增
is_managed_backend_pid(),只把带有脚本标记的 Java 进程视为脚本托管进程 collect_pids()改为仅收集:PID_FILE中仍存活且校验通过的进程- 命令行里带脚本标记的进程
- 不再把“端口占用者”或“仅命中 jar 名的进程”直接纳入停机目标
status增加提示:若未发现脚本托管进程,但62318被其他进程占用,会明确输出占用 PID,避免误判为脚本自身后端
- 新增
- 调整
docs/tests/scripts/test-restart-java-backend.sh- 增加对
APP_MARKER的静态校验,防止后续移除托管标记
- 增加对
- 新增
docs/tests/scripts/test-restart-java-backend-stop-scope.sh- 在临时目录复制启停脚本
- 启动一个未托管的外部占口进程
- 验证执行
stop后该外部进程仍然存活,防止回归到误杀外部进程的行为
验证记录
- 执行
sh docs/tests/scripts/test-restart-java-backend-stop-scope.sh- 结果:通过
- 说明:已验证
stop不会误杀未由脚本托管的占口进程
- 执行
sh docs/tests/scripts/test-restart-java-backend.sh- 结果:通过
- 说明:已验证脚本仍使用
java -jar ruoyi-admin.jar启动,且保留托管进程标记
- 执行
sh -n bin/restart_java_backend.sh- 结果:通过
- 说明:脚本语法正确
影响范围
- 仅影响本地后端启停辅助脚本与对应测试脚本
- 不涉及 Java 业务代码、数据库、前端页面及 Mock 服务逻辑