#!/bin/bash # ERP AI Assistant - 停止脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 项目根目录 PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PID_FILE="$PROJECT_ROOT/logs/pids.txt" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} ERP AI Assistant - 停止中...${NC}" echo -e "${BLUE}========================================${NC}" echo "" if [ ! -f "$PID_FILE" ]; then echo -e "${YELLOW}⚠ 未找到 PID 文件,服务可能未运行${NC}" exit 0 fi # 读取并停止进程 STOPPED=0 FAILED=0 while read pid; do if kill -0 "$pid" 2>/dev/null; then PROCESS_NAME=$(ps -p "$pid" -o comm= 2>/dev/null || echo "Unknown") echo -e "${YELLOW}停止进程: $pid ($PROCESS_NAME)${NC}" if kill "$pid" 2>/dev/null; then echo -e "${GREEN}✓ 进程 $pid 已停止${NC}" ((STOPPED++)) else echo -e "${RED}✗ 无法停止进程 $pid${NC}" ((FAILED++)) fi else echo -e "${YELLOW} 进程 $pid 已不存在${NC}" fi done < "$PID_FILE" # 等待进程完全停止 sleep 2 # 强制杀死残留进程 while read pid; do if kill -0 "$pid" 2>/dev/null; then echo -e "${YELLOW}强制停止进程: $pid${NC}" kill -9 "$pid" 2>/dev/null || true fi done < "$PID_FILE" # 清理 PID 文件 rm -f "$PID_FILE" echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} ✅ 停止完成${NC}" echo -e "${GREEN}========================================${NC}" echo -e " 已停止: $STOPPED 个进程" if [ $FAILED -gt 0 ]; then echo -e " 失败: ${RED}$FAILED${NC} 个进程" fi echo ""