From adcd49a5db700772a8c9212ad214a3fd89a06ef3 Mon Sep 17 00:00:00 2001 From: ayou <550244300@qq.com> Date: Wed, 24 Sep 2025 00:27:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC):=20?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E5=90=8E=E7=AB=AF=E9=83=A8=E7=BD=B2=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E5=81=A5=E5=A3=AE=E6=80=A7=E5=92=8C=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加路径检查和进程验证逻辑,改进错误处理和调试日志输出 --- scripts/deploy_backend.sh | 57 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/scripts/deploy_backend.sh b/scripts/deploy_backend.sh index 1e3785e..1b550e4 100644 --- a/scripts/deploy_backend.sh +++ b/scripts/deploy_backend.sh @@ -9,13 +9,34 @@ set -euo pipefail -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)" +# 获取脚本所在目录的绝对路径 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BACKEND_DIR="$ROOT_DIR/backend" BIN_PATH="$BACKEND_DIR/target/release/udmin" LOG_FILE="$BACKEND_DIR/udmin.log" PID_FILE="$BACKEND_DIR/udmin.pid" ENV_FILE_VALUE="${ENV_FILE:-prod}" +# 调试信息:打印关键路径 +echo "[backend] Script directory: $SCRIPT_DIR" +echo "[backend] Root directory: $ROOT_DIR" +echo "[backend] Backend directory: $BACKEND_DIR" +echo "[backend] Binary path: $BIN_PATH" + +# 检查关键目录是否存在 +if [ ! -d "$BACKEND_DIR" ]; then + echo "[backend] ERROR: Backend directory does not exist: $BACKEND_DIR" >&2 + echo "[backend] Please ensure the script is placed in the correct location relative to the project structure" >&2 + exit 1 +fi + +if [ ! -f "$BACKEND_DIR/Cargo.toml" ]; then + echo "[backend] ERROR: Cargo.toml not found in backend directory: $BACKEND_DIR" >&2 + echo "[backend] This doesn't appear to be a valid Rust project directory" >&2 + exit 1 +fi + cd "$BACKEND_DIR" echo "[backend] Building release binary..." @@ -47,21 +68,32 @@ stop_pid() { } # 1) Stop by PID file if present +echo "[backend] Checking for existing PID file: $PID_FILE" if [ -f "$PID_FILE" ]; then PID_CONTENT="$(cat "$PID_FILE" 2>/dev/null || true)" if [ -n "$PID_CONTENT" ]; then + echo "[backend] Found PID file with PID: $PID_CONTENT" stop_pid "$PID_CONTENT" + else + echo "[backend] PID file exists but is empty" fi rm -f "$PID_FILE" + echo "[backend] Removed PID file" +else + echo "[backend] No PID file found" fi # 2) Fallback: stop any process matching the release binary path (safe, avoids killing debug run) +echo "[backend] Searching for existing processes matching: $BIN_PATH" PGREP_PIDS="$(pgrep -f "$BIN_PATH" 2>/dev/null || true)" if [ -n "$PGREP_PIDS" ]; then - echo "[backend] Found existing udmin by path, stopping: $PGREP_PIDS" + echo "[backend] Found existing udmin processes by path: $PGREP_PIDS" for p in $PGREP_PIDS; do + echo "[backend] Stopping process: $p" stop_pid "$p" done +else + echo "[backend] No existing processes found matching the binary path" fi # Rotate log @@ -77,6 +109,23 @@ NEW_PID=$! echo "$NEW_PID" > "$PID_FILE" -echo "[backend] Started. PID=$NEW_PID" +echo "[backend] Started with PID: $NEW_PID" echo "[backend] Logs: $LOG_FILE" -echo "[backend] PID file: $PID_FILE" \ No newline at end of file +echo "[backend] PID file: $PID_FILE" + +# 等待几秒钟验证进程是否成功启动 +echo "[backend] Waiting 3 seconds to verify startup..." +sleep 3 + +if ps -p "$NEW_PID" > /dev/null 2>&1; then + echo "[backend] ✅ Process is running successfully (PID: $NEW_PID)" + echo "[backend] Deployment completed successfully!" +else + echo "[backend] ❌ ERROR: Process failed to start or crashed immediately" >&2 + echo "[backend] Check the log file for details: $LOG_FILE" >&2 + if [ -f "$LOG_FILE" ]; then + echo "[backend] Last few lines of log:" >&2 + tail -10 "$LOG_FILE" >&2 + fi + exit 1 +fi \ No newline at end of file