stop_prod.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/bin/bash
  2. # 生产环境停止脚本
  3. # 用于停止记忆总结服务
  4. set -e
  5. # 获取脚本所在目录
  6. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  7. cd "$SCRIPT_DIR"
  8. # 颜色输出
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. RED='\033[0;31m'
  12. NC='\033[0m' # No Color
  13. PID_FILE="$SCRIPT_DIR/summarize_memory.pid"
  14. if [ ! -f "$PID_FILE" ]; then
  15. echo -e "${YELLOW}⚠️ PID文件不存在,尝试通过进程名查找...${NC}"
  16. PID=$(pgrep -f "summarize_memory.py" | head -n 1)
  17. if [ -z "$PID" ]; then
  18. echo -e "${YELLOW}⚠️ 未找到运行中的记忆总结服务${NC}"
  19. exit 0
  20. fi
  21. else
  22. PID=$(cat "$PID_FILE")
  23. fi
  24. if [ -z "$PID" ]; then
  25. echo -e "${YELLOW}⚠️ 未找到进程ID${NC}"
  26. exit 0
  27. fi
  28. # 检查进程是否存在
  29. if ! ps -p "$PID" > /dev/null 2>&1; then
  30. echo -e "${YELLOW}⚠️ 进程 $PID 不存在,可能已经停止${NC}"
  31. rm -f "$PID_FILE"
  32. exit 0
  33. fi
  34. echo -e "${YELLOW}🛑 正在停止记忆总结服务 (PID: $PID)...${NC}"
  35. # 发送 SIGTERM 信号
  36. kill "$PID" 2>/dev/null || true
  37. # 等待进程结束(最多等待10秒)
  38. for i in {1..10}; do
  39. if ! ps -p "$PID" > /dev/null 2>&1; then
  40. echo -e "${GREEN}✅ 服务已停止${NC}"
  41. rm -f "$PID_FILE"
  42. exit 0
  43. fi
  44. sleep 1
  45. done
  46. # 如果10秒后仍未停止,强制杀死
  47. if ps -p "$PID" > /dev/null 2>&1; then
  48. echo -e "${YELLOW}⚠️ 进程未响应,强制停止...${NC}"
  49. kill -9 "$PID" 2>/dev/null || true
  50. sleep 1
  51. if ! ps -p "$PID" > /dev/null 2>&1; then
  52. echo -e "${GREEN}✅ 服务已强制停止${NC}"
  53. rm -f "$PID_FILE"
  54. else
  55. echo -e "${RED}❌ 无法停止服务,请手动检查${NC}"
  56. exit 1
  57. fi
  58. fi