2026-04-02 11:36:05 +08:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
# 须用 bash 执行;若误用 sh/dash 会自动改用 bash 再跑一遍
|
|
|
|
|
|
[ -n "${BASH_VERSION:-}" ] || exec /usr/bin/env bash "$0" ${1+"$@"}
|
2026-04-20 15:59:11 +08:00
|
|
|
|
# 重启 Java 后端 chat_web_backend.jar(源码 mvn 编译产物,profile=dev)
|
2026-04-02 11:36:05 +08:00
|
|
|
|
# 日志:gangyan/logs/backend.log
|
2026-04-20 15:59:11 +08:00
|
|
|
|
# 注:backend/chat_web_yj.jar(同一 jar 的改名副本)及其 application-local.yml 覆盖配置已于 2026-04-20 归档删除。
|
2026-04-02 11:36:05 +08:00
|
|
|
|
set -u
|
|
|
|
|
|
source "$(cd "$(dirname "$0")" && pwd)/common-restart.sh"
|
2026-04-20 15:59:11 +08:00
|
|
|
|
# 默认 backend.log;若曾被 root 创建导致当前用户不可写,则改用同目录 backend-<用户>.log
|
2026-04-02 11:36:05 +08:00
|
|
|
|
LOG_FILE="$LOG_DIR/backend.log"
|
|
|
|
|
|
if ! ( umask 022; : >>"$LOG_FILE" ) 2>/dev/null; then
|
|
|
|
|
|
ALT="$LOG_DIR/backend-$(id -un).log"
|
|
|
|
|
|
if ( umask 022; : >>"$ALT" ) 2>/dev/null; then
|
|
|
|
|
|
LOG_FILE="$ALT"
|
|
|
|
|
|
log_tee "注意: $LOG_DIR/backend.log 不可写(多为 root 遗留),已改用 $LOG_FILE"
|
|
|
|
|
|
log_tee "修复后可统一回 backend.log: sudo chown $(id -un):$(id -gn) \"$LOG_DIR/backend.log\" 或 sudo rm -f \"$LOG_DIR/backend.log\""
|
|
|
|
|
|
else
|
|
|
|
|
|
mkdir -p "${HOME}/.gangyan/logs"
|
|
|
|
|
|
LOG_FILE="${HOME}/.gangyan/logs/backend-restart.log"
|
|
|
|
|
|
log_tee "注意: gangyan/logs 不可写,Java 日志暂存: $LOG_FILE"
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
|
|
|
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
|
|
|
|
|
2026-04-20 15:59:11 +08:00
|
|
|
|
BACKEND_DIR="$GANGYAN_ROOT/chat_web_backend"
|
|
|
|
|
|
JAR_REL="target/chat_web_backend.jar"
|
2026-04-02 11:36:05 +08:00
|
|
|
|
|
2026-04-20 15:59:11 +08:00
|
|
|
|
if [ ! -f "$BACKEND_DIR/$JAR_REL" ]; then
|
|
|
|
|
|
log_tee "错误: 未找到 $BACKEND_DIR/$JAR_REL。先执行 chat_web_backend/compile.sh 编译。"
|
|
|
|
|
|
exit 1
|
2026-04-02 11:36:05 +08:00
|
|
|
|
fi
|
2026-04-20 15:59:11 +08:00
|
|
|
|
|
|
|
|
|
|
log_tee "======== 停止 chat_web_backend.jar ========"
|
|
|
|
|
|
pkill -f "target/chat_web_backend.jar" 2>/dev/null && log_tee "已发送停止信号" || log_tee "未找到运行中的进程"
|
|
|
|
|
|
sleep 2
|
|
|
|
|
|
# 端口兜底(非 hawei 启的旧进程 lsof 可能看不到,用 ss 探测)
|
|
|
|
|
|
if ss -tln 2>/dev/null | grep -qE ':8099[[:space:]]'; then
|
|
|
|
|
|
log_tee "8099 仍被占用,再等 3 秒..."
|
|
|
|
|
|
sleep 3
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
log_tee "======== 启动 chat_web_backend.jar (profile=dev) ========"
|
|
|
|
|
|
cd "$BACKEND_DIR"
|
2026-04-02 11:36:05 +08:00
|
|
|
|
nohup java -jar \
|
|
|
|
|
|
-Xms512m -Xmx2048m \
|
2026-04-20 15:59:11 +08:00
|
|
|
|
"$JAR_REL" \
|
|
|
|
|
|
--spring.profiles.active=dev >> "$LOG_FILE" 2>&1 &
|
2026-04-02 11:36:05 +08:00
|
|
|
|
STARTED_PID=$!
|
|
|
|
|
|
log_tee "已后台启动,PID=$STARTED_PID"
|
|
|
|
|
|
log_tee "Java 标准输出/错误写入: $LOG_FILE"
|
|
|
|
|
|
sleep 3
|
|
|
|
|
|
if kill -0 "$STARTED_PID" 2>/dev/null; then
|
2026-04-20 15:59:11 +08:00
|
|
|
|
if ss -tln 2>/dev/null | grep -qE ':8099[[:space:]]'; then
|
|
|
|
|
|
log_tee "自检: 进程存活且 8099 已监听"
|
2026-04-02 11:36:05 +08:00
|
|
|
|
else
|
2026-04-20 15:59:11 +08:00
|
|
|
|
log_tee "自检: 进程存活,但 8099 尚未监听(可能仍在启动;10 秒后若仍无请 tail $LOG_FILE)"
|
2026-04-02 11:36:05 +08:00
|
|
|
|
fi
|
|
|
|
|
|
else
|
2026-04-20 15:59:11 +08:00
|
|
|
|
log_tee "自检失败: 进程已退出。最近日志:"
|
2026-04-02 11:36:05 +08:00
|
|
|
|
tail -n 40 "$LOG_FILE" 2>/dev/null | while IFS= read -r line || [ -n "$line" ]; do log_line "$line"; done
|
2026-04-20 15:59:11 +08:00
|
|
|
|
exit 1
|
2026-04-02 11:36:05 +08:00
|
|
|
|
fi
|