start.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/bin/bash
  2. # 知识工具服务启动脚本
  3. set -e
  4. # 颜色定义
  5. RED='\033[0;31m'
  6. GREEN='\033[0;32m'
  7. YELLOW='\033[1;33m'
  8. NC='\033[0m' # No Color
  9. # 项目根目录
  10. PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  11. PID_FILE="$PROJECT_DIR/app.pid"
  12. # 生成带时间戳的日志文件名
  13. TIMESTAMP=$(date +%Y%m%d_%H%M%S)
  14. LOG_FILE="$PROJECT_DIR/logs/app_${TIMESTAMP}.log"
  15. LATEST_LOG_LINK="$PROJECT_DIR/logs/app.log"
  16. echo -e "${GREEN}启动知识工具服务...${NC}"
  17. # 检查是否已经运行
  18. if [ -f "$PID_FILE" ]; then
  19. PID=$(cat "$PID_FILE")
  20. if ps -p "$PID" > /dev/null 2>&1; then
  21. echo -e "${YELLOW}服务已经在运行中 (PID: $PID)${NC}"
  22. exit 1
  23. else
  24. echo -e "${YELLOW}发现旧的PID文件,正在清理...${NC}"
  25. rm -f "$PID_FILE"
  26. fi
  27. fi
  28. # 创建日志目录
  29. mkdir -p "$PROJECT_DIR/logs"
  30. # 检查环境变量文件
  31. if [ ! -f "$PROJECT_DIR/.env" ]; then
  32. echo -e "${YELLOW}警告: 未找到.env文件,请创建配置文件${NC}"
  33. echo "示例配置:"
  34. echo "OPENAI_API_KEY=your_api_key_here"
  35. echo "HOST=0.0.0.0"
  36. echo "PORT=8000"
  37. echo "DEBUG=True"
  38. fi
  39. # 检查Python依赖
  40. if [ ! -d "$PROJECT_DIR/venv" ]; then
  41. echo -e "${YELLOW}未找到虚拟环境,正在创建...${NC}"
  42. python3 -m venv "$PROJECT_DIR/venv"
  43. fi
  44. # 激活虚拟环境
  45. source "$PROJECT_DIR/venv/bin/activate"
  46. # 生产运行禁用自动重载
  47. export DEBUG=False
  48. # 安装依赖
  49. echo -e "${GREEN}安装Python依赖...${NC}"
  50. pip install -r requirements.txt
  51. # 清理旧日志(可选:保留最近10个日志文件)
  52. echo -e "${GREEN}清理旧日志...${NC}"
  53. ls -t "$PROJECT_DIR/logs"/app_*.log 2>/dev/null | tail -n +11 | xargs rm -f 2>/dev/null || true
  54. # 启动服务
  55. echo -e "${GREEN}启动服务...${NC}"
  56. nohup python main.py > "$LOG_FILE" 2>&1 &
  57. PID=$!
  58. # 创建符号链接指向最新日志
  59. rm -f "$LATEST_LOG_LINK"
  60. ln -s "app_${TIMESTAMP}.log" "$LATEST_LOG_LINK"
  61. # 保存PID
  62. echo $PID > "$PID_FILE"
  63. # 等待服务启动
  64. sleep 3
  65. # 检查服务是否启动成功
  66. if ps -p "$PID" > /dev/null 2>&1; then
  67. echo -e "${GREEN}服务启动成功!${NC}"
  68. echo -e "${GREEN}PID: $PID${NC}"
  69. echo -e "${GREEN}日志文件: $LOG_FILE${NC}"
  70. echo -e "${GREEN}日志链接: $LATEST_LOG_LINK (始终指向最新日志)${NC}"
  71. echo -e "${GREEN}API文档: http://localhost:8079/docs${NC}"
  72. echo -e "${GREEN}健康检查: http://localhost:8079/health${NC}"
  73. echo -e "${YELLOW}提示: 系统自动保留最近10个日志文件${NC}"
  74. else
  75. echo -e "${RED}服务启动失败!${NC}"
  76. echo -e "${RED}请检查日志文件: $LOG_FILE${NC}"
  77. rm -f "$PID_FILE"
  78. exit 1
  79. fi