74 lines
1.7 KiB
Bash
Executable File
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 "完成!"
|