#!/bin/bash # 3D 店內導引 Demo - 關閉伺服器腳本 # 使用方式: ./stop-server.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" PID_FILE="$SCRIPT_DIR/.server.pid" LOG_FILE="$SCRIPT_DIR/.server.log" echo "==========================================" echo " 關閉 3D 店內導引 Demo 伺服器" echo "==========================================" echo "" # 檢查 PID 檔案是否存在 if [ ! -f "$PID_FILE" ]; then echo "找不到執行中的伺服器" # 嘗試找到並關閉可能的遺留程序 VITE_PIDS=$(pgrep -f "vite.*--host" 2>/dev/null) if [ -n "$VITE_PIDS" ]; then echo "" echo "發現可能的遺留程序: $VITE_PIDS" read -p "是否要關閉這些程序? (y/n) " -n 1 -r echo "" if [[ $REPLY =~ ^[Yy]$ ]]; then kill $VITE_PIDS 2>/dev/null echo "已關閉遺留程序" fi fi exit 0 fi # 讀取 PID PID=$(cat "$PID_FILE") # 檢查程序是否存在 if ps -p "$PID" > /dev/null 2>&1; then echo "正在關閉伺服器 (PID: $PID)..." # 先嘗試優雅關閉 kill "$PID" 2>/dev/null # 等待程序結束 for i in {1..5}; do if ! ps -p "$PID" > /dev/null 2>&1; then break fi sleep 1 done # 如果還在執行,強制關閉 if ps -p "$PID" > /dev/null 2>&1; then echo "程序未響應,強制關閉..." kill -9 "$PID" 2>/dev/null fi # 同時關閉可能的子程序 pkill -f "vite.*--host.*3000" 2>/dev/null echo "" echo "伺服器已關閉" else echo "伺服器程序已不存在 (PID: $PID)" fi # 清理檔案 rm -f "$PID_FILE" echo "" echo "完成!"