diff --git a/xiaoqu-agent-service/deploy/deploy.sh b/xiaoqu-agent-service/deploy/deploy.sh index 0360eee..00a70b4 100755 --- a/xiaoqu-agent-service/deploy/deploy.sh +++ b/xiaoqu-agent-service/deploy/deploy.sh @@ -119,10 +119,10 @@ do_push() { echo "[OK] 已上传到 $REMOTE_SSH_HOST:$REMOTE_DIR/xiaoqu-agent-service.jar.new" } -do_remote_deploy() { - do_build - do_push - ssh_remote "REMOTE_DIR='$REMOTE_DIR' REMOTE_PROFILE='$REMOTE_PROFILE' REMOTE_PORT='$REMOTE_PORT' REMOTE_JAVA_OPTS='$REMOTE_JAVA_OPTS' REMOTE_SPRING_ARGS='$REMOTE_SPRING_ARGS' REMOTE_JAVA_BIN='$REMOTE_JAVA_BIN' bash -s" <<'EOS' +# 在远程执行 停旧→(可选)换包→启动→健康检查;$1: 1=换上新传的 jar,0=仅重启现有 jar +run_remote_script() { + load_remote_conf + ssh_remote "REMOTE_DIR='$REMOTE_DIR' REMOTE_PROFILE='$REMOTE_PROFILE' REMOTE_PORT='$REMOTE_PORT' REMOTE_JAVA_OPTS='$REMOTE_JAVA_OPTS' REMOTE_SPRING_ARGS='$REMOTE_SPRING_ARGS' REMOTE_JAVA_BIN='$REMOTE_JAVA_BIN' DEPLOY_NEW='$1' bash -s" <<'EOS' set -euo pipefail cd "$REMOTE_DIR" if [ -f app.pid ] && kill -0 "$(cat app.pid)" 2>/dev/null; then @@ -130,8 +130,10 @@ if [ -f app.pid ] && kill -0 "$(cat app.pid)" 2>/dev/null; then for i in $(seq 1 15); do kill -0 "$(cat app.pid)" 2>/dev/null || break; sleep 1; done kill -0 "$(cat app.pid)" 2>/dev/null && kill -9 "$(cat app.pid)" fi -[ -f xiaoqu-agent-service.jar ] && cp xiaoqu-agent-service.jar "xiaoqu-agent-service.jar.bak.$(date +%Y%m%d%H%M%S)" -mv -f xiaoqu-agent-service.jar.new xiaoqu-agent-service.jar +if [ "$DEPLOY_NEW" = "1" ]; then + [ -f xiaoqu-agent-service.jar ] && cp xiaoqu-agent-service.jar "xiaoqu-agent-service.jar.bak.$(date +%Y%m%d%H%M%S)" + mv -f xiaoqu-agent-service.jar.new xiaoqu-agent-service.jar +fi if [ -f app.env ]; then set -a; source app.env; set +a else @@ -161,6 +163,16 @@ exit 1 EOS } +do_remote_deploy() { + do_build + do_push + run_remote_script 1 +} + +do_remote_restart() { + run_remote_script 0 +} + do_remote_stop() { load_remote_conf ssh_remote "cd '$REMOTE_DIR' && if [ -f app.pid ] && kill -0 \$(cat app.pid) 2>/dev/null; then kill \$(cat app.pid) && rm -f app.pid && echo '[OK] 远程已停止'; else echo '[SKIP] 远程未在运行'; fi" @@ -180,10 +192,11 @@ case "${1:-}" in log) tail -f "$LOG_FILE" ;; push) do_push ;; remote-deploy) do_remote_deploy ;; + remote-restart) do_remote_restart ;; remote-stop) do_remote_stop ;; remote-status) do_remote_status ;; remote-log) load_remote_conf; ssh_remote "tail -f '$REMOTE_DIR/logs/agent-service.log'" ;; *) - echo "用法: $0 {build|start|stop|restart|status|log|push|remote-deploy|remote-stop|remote-status|remote-log}" >&2 + echo "用法: $0 {build|start|stop|restart|status|log|push|remote-deploy|remote-restart|remote-stop|remote-status|remote-log}" >&2 exit 1 ;; esac diff --git a/xiaoqu-agent-service/deploy/remote.conf.example b/xiaoqu-agent-service/deploy/remote.conf.example index 5f297a1..4159c06 100644 --- a/xiaoqu-agent-service/deploy/remote.conf.example +++ b/xiaoqu-agent-service/deploy/remote.conf.example @@ -19,7 +19,7 @@ REMOTE_PROFILE=prod REMOTE_PORT=8088 # JVM 参数(可选) -REMOTE_JAVA_OPTS=-Xms512m -Xmx1024m +REMOTE_JAVA_OPTS="-Xms512m -Xmx1024m" # java 命令路径(可选,默认用 PATH 里的 java;远程有多个 JDK 时建议显式指定 17) # REMOTE_JAVA_BIN=/usr/lib/jvm/jre-17-openjdk/bin/java