#!/bin/bash # Neural Sync 停止器 - 停止所有服务 PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$PROJECT_DIR" GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo "🛑 停止 Neural Sync 服务" echo "====================" # 从 PID 文件读取并停止 if [ -f "logs/backend.pid" ]; then BACKEND_PID=$(cat logs/backend.pid) if ps -p $BACKEND_PID > /dev/null 2>&1; then kill $BACKEND_PID 2>/dev/null echo -e "${GREEN}✅ 后端已停止 (PID: $BACKEND_PID)${NC}" fi rm logs/backend.pid fi if [ -f "logs/frontend.pid" ]; then FRONTEND_PID=$(cat logs/frontend.pid) if ps -p $FRONTEND_PID > /dev/null 2>&1; then kill $FRONTEND_PID 2>/dev/null echo -e "${GREEN}✅ 前端已停止 (PID: $FRONTEND_PID)${NC}" fi rm logs/frontend.pid fi if [ -f "logs/tunnel.pid" ]; then TUNNEL_PID=$(cat logs/tunnel.pid) if ps -p $TUNNEL_PID > /dev/null 2>&1; then kill $TUNNEL_PID 2>/dev/null echo -e "${GREEN}✅ Cloudflare Tunnel 已停止 (PID: $TUNNEL_PID)${NC}" fi rm logs/tunnel.pid fi if [ -f "logs/tunnel-frontend.pid" ]; then TUNNEL_FRONT_PID=$(cat logs/tunnel-frontend.pid) if ps -p $TUNNEL_FRONT_PID > /dev/null 2>&1; then kill $TUNNEL_FRONT_PID 2>/dev/null echo -e "${GREEN}✅ 前端 Tunnel 已停止 (PID: $TUNNEL_FRONT_PID)${NC}" fi rm logs/tunnel-frontend.pid fi if [ -f "logs/tunnel-backend.pid" ]; then TUNNEL_BACK_PID=$(cat logs/tunnel-backend.pid) if ps -p $TUNNEL_BACK_PID > /dev/null 2>&1; then kill $TUNNEL_BACK_PID 2>/dev/null echo -e "${GREEN}✅ 后端 Tunnel 已停止 (PID: $TUNNEL_BACK_PID)${NC}" fi rm logs/tunnel-backend.pid fi # Fallback: kill by name just in case pkill -f "cloudflared tunnel --url http://127.0.0.1:5174" >/dev/null 2>&1 || true pkill -f "cloudflared tunnel --url http://localhost:5174" >/dev/null 2>&1 || true pkill -f "cloudflared tunnel --url http://127.0.0.1:8000" >/dev/null 2>&1 || true pkill -f "cloudflared tunnel --url http://localhost:8000" >/dev/null 2>&1 || true pkill -f "cloudflared tunnel run" >/dev/null 2>&1 || true # 清理端口 (8000 后端, 5173/5174 前端) lsof -ti:8000 2>/dev/null | xargs kill -9 2>/dev/null || true lsof -ti:5173 2>/dev/null | xargs kill -9 2>/dev/null || true lsof -ti:5174 2>/dev/null | xargs kill -9 2>/dev/null || true # 停止 Ollama(可选) read -p "是否同时停止 Ollama? (y/N) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then pkill -9 -f "ollama serve" 2>/dev/null && echo -e "${GREEN}✅ Ollama 已停止${NC}" || true fi echo -e "${GREEN}🎉 所有服务已停止${NC}"