Files
3d-guiding-demo/stop-server.sh
2025-12-09 16:07:11 +08:00

74 lines
1.7 KiB
Bash
Executable File

#!/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 "完成!"