Files
gangyan/scripts/backend-restart.sh

59 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 须用 bash 执行;若误用 sh/dash 会自动改用 bash 再跑一遍
[ -n "${BASH_VERSION:-}" ] || exec /usr/bin/env bash "$0" ${1+"$@"}
# 重启 Java 后端 chat_web_yj.jar与 start_all.sh 一致)
# 日志gangyan/logs/backend.log
# 勿在此加 -Dspring.datasource*:与 application-local.yml 打架易连错库。
# 若 jar 未重打、内嵌 yml 仍是远程库,必须依赖 backend/application-local.yml含完整 spring 数据源)。
set -u
source "$(cd "$(dirname "$0")" && pwd)/common-restart.sh"
# 默认 backend.log若曾被 root 创建导致当前用户不可写,则改用同目录 backend-<用户>.log仍在 gangyan/logs 下)
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"
log_tee "======== 停止 chat_web_yj.jar ========"
pkill -f "chat_web_yj.jar" 2>/dev/null && log_tee "已发送停止信号" || log_tee "未找到运行中的进程"
sleep 2
log_tee "======== 启动 chat_web_yj.jar ========"
cd "$GANGYAN_ROOT/backend"
LOCAL_CFG="$GANGYAN_ROOT/backend/application-local.yml"
EXTRA_JAVA_ARGS=()
if [ -f "$LOCAL_CFG" ]; then
log_tee "加载本地配置: $LOCAL_CFG"
EXTRA_JAVA_ARGS=(-Dspring.config.additional-location="file:${LOCAL_CFG}")
fi
nohup java -jar \
-Xms512m -Xmx2048m \
"${EXTRA_JAVA_ARGS[@]}" \
-Dspring.profiles.active=yj \
chat_web_yj.jar >> "$LOG_FILE" 2>&1 &
STARTED_PID=$!
log_tee "已后台启动PID=$STARTED_PID"
log_tee "Java 标准输出/错误写入: $LOG_FILE"
sleep 3
if kill -0 "$STARTED_PID" 2>/dev/null; then
if command -v ss >/dev/null 2>&1 && ss -tln 2>/dev/null | grep -q ':8099'; then
log_tee "自检: 进程存活且 8099 已监听(后端已就绪或即将就绪)"
else
log_tee "自检: 进程存活,但 8099 尚未监听(可能仍在启动;若 10 秒后仍无,请 tail 上面日志路径)"
fi
else
log_tee "自检失败: 进程已退出。请查看日志末尾:"
tail -n 40 "$LOG_FILE" 2>/dev/null | while IFS= read -r line || [ -n "$line" ]; do log_line "$line"; done
fi