| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/bin/bash
- # ============================================
- # 中华药典 AI Agent — Java 后端启动脚本
- # ============================================
- set -e
- APP_DIR="/opt/pharmacopoeia-ai/backend-java"
- JAR_FILE="$APP_DIR/target/pharmacopoeia-ai-1.0.0.jar"
- LOG_DIR="/var/log/pharmacopoeia"
- PID_FILE="$APP_DIR/app.pid"
- # 加载 .env 环境变量
- if [ -f /opt/pharmacopoeia-ai/.env ]; then
- set -a
- source /opt/pharmacopoeia-ai/.env
- set +a
- fi
- # 创建日志目录
- mkdir -p "$LOG_DIR"
- # ---- 通用函数 ----
- running() {
- [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
- }
- start() {
- if running; then
- echo "后端已在运行中 (PID: $(cat "$PID_FILE"))"
- return 1
- fi
- if [ ! -f "$JAR_FILE" ]; then
- echo "JAR 不存在,正在编译..."
- cd "$APP_DIR"
- mvn clean package -DskipTests -q
- fi
- echo "启动后端..."
- cd "$APP_DIR"
- # JVM 参数
- JVM_OPTS="-Xms512m -Xmx2g"
- JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
- JVM_OPTS="$JVM_OPTS -Dfile.encoding=UTF-8"
- JVM_OPTS="$JVM_OPTS -Djava.security.egd=file:/dev/./urandom"
- nohup java $JVM_OPTS -jar "$JAR_FILE" \
- >> "$LOG_DIR/backend.log" 2>&1 &
- echo $! > "$PID_FILE"
- echo "已启动 (PID: $(cat "$PID_FILE"))"
- echo "日志: $LOG_DIR/backend.log"
- echo ""
- tail -f "$LOG_DIR/backend.log"
- }
- stop() {
- if ! running; then
- echo "后端未运行"
- rm -f "$PID_FILE"
- return 0
- fi
- PID=$(cat "$PID_FILE")
- echo "停止后端 (PID: $PID)..."
- kill "$PID"
- # 等待最多 30 秒
- for i in $(seq 1 30); do
- if ! kill -0 "$PID" 2>/dev/null; then
- echo "已停止"
- rm -f "$PID_FILE"
- return 0
- fi
- sleep 1
- done
- # 强制终止
- echo "超时,强制终止..."
- kill -9 "$PID" 2>/dev/null
- rm -f "$PID_FILE"
- echo "已强制停止"
- }
- restart() {
- stop
- sleep 2
- start
- }
- status() {
- if running; then
- echo "✅ 后端运行中 (PID: $(cat "$PID_FILE"))"
- else
- echo "❌ 后端未运行"
- fi
- }
- logs() {
- tail -100 "$LOG_DIR/backend.log"
- }
- case "${1:-start}" in
- start) start ;;
- stop) stop ;;
- restart) restart ;;
- status) status ;;
- logs) logs ;;
- *)
- echo "用法: $0 {start|stop|restart|status|logs}"
- exit 1
- ;;
- esac
|