start-java.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/bash
  2. # ============================================
  3. # 中华药典 AI Agent — Java 后端启动脚本
  4. # ============================================
  5. set -e
  6. APP_DIR="/opt/pharmacopoeia-ai/backend-java"
  7. JAR_FILE="$APP_DIR/target/pharmacopoeia-ai-1.0.0.jar"
  8. LOG_DIR="/var/log/pharmacopoeia"
  9. PID_FILE="$APP_DIR/app.pid"
  10. # 加载 .env 环境变量
  11. if [ -f /opt/pharmacopoeia-ai/.env ]; then
  12. set -a
  13. source /opt/pharmacopoeia-ai/.env
  14. set +a
  15. fi
  16. # 创建日志目录
  17. mkdir -p "$LOG_DIR"
  18. # ---- 通用函数 ----
  19. running() {
  20. [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
  21. }
  22. start() {
  23. if running; then
  24. echo "后端已在运行中 (PID: $(cat "$PID_FILE"))"
  25. return 1
  26. fi
  27. if [ ! -f "$JAR_FILE" ]; then
  28. echo "JAR 不存在,正在编译..."
  29. cd "$APP_DIR"
  30. mvn clean package -DskipTests -q
  31. fi
  32. echo "启动后端..."
  33. cd "$APP_DIR"
  34. # JVM 参数
  35. JVM_OPTS="-Xms512m -Xmx2g"
  36. JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
  37. JVM_OPTS="$JVM_OPTS -Dfile.encoding=UTF-8"
  38. JVM_OPTS="$JVM_OPTS -Djava.security.egd=file:/dev/./urandom"
  39. nohup java $JVM_OPTS -jar "$JAR_FILE" \
  40. >> "$LOG_DIR/backend.log" 2>&1 &
  41. echo $! > "$PID_FILE"
  42. echo "已启动 (PID: $(cat "$PID_FILE"))"
  43. echo "日志: $LOG_DIR/backend.log"
  44. echo ""
  45. tail -f "$LOG_DIR/backend.log"
  46. }
  47. stop() {
  48. if ! running; then
  49. echo "后端未运行"
  50. rm -f "$PID_FILE"
  51. return 0
  52. fi
  53. PID=$(cat "$PID_FILE")
  54. echo "停止后端 (PID: $PID)..."
  55. kill "$PID"
  56. # 等待最多 30 秒
  57. for i in $(seq 1 30); do
  58. if ! kill -0 "$PID" 2>/dev/null; then
  59. echo "已停止"
  60. rm -f "$PID_FILE"
  61. return 0
  62. fi
  63. sleep 1
  64. done
  65. # 强制终止
  66. echo "超时,强制终止..."
  67. kill -9 "$PID" 2>/dev/null
  68. rm -f "$PID_FILE"
  69. echo "已强制停止"
  70. }
  71. restart() {
  72. stop
  73. sleep 2
  74. start
  75. }
  76. status() {
  77. if running; then
  78. echo "✅ 后端运行中 (PID: $(cat "$PID_FILE"))"
  79. else
  80. echo "❌ 后端未运行"
  81. fi
  82. }
  83. logs() {
  84. tail -100 "$LOG_DIR/backend.log"
  85. }
  86. case "${1:-start}" in
  87. start) start ;;
  88. stop) stop ;;
  89. restart) restart ;;
  90. status) status ;;
  91. logs) logs ;;
  92. *)
  93. echo "用法: $0 {start|stop|restart|status|logs}"
  94. exit 1
  95. ;;
  96. esac