#!/bin/bash # 宝塔面板后端启动脚本 # 设置JAVA_HOME(根据实际Java安装路径修改) # export JAVA_HOME=/usr/lib/jvm/java-21-openjdk # export PATH=$JAVA_HOME/bin:$PATH # 应用配置 APP_NAME="aigc-backend" APP_JAR="app.jar" APP_PORT=8080 APP_HOME=$(cd "$(dirname "$0")"; pwd) LOG_DIR="$APP_HOME/logs" PID_FILE="$APP_HOME/app.pid" # JVM参数(根据服务器内存调整) JAVA_OPTS="-Xms1g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom" # 创建日志目录 mkdir -p $LOG_DIR # 启动函数 start() { if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo "$APP_NAME 已经在运行中 (PID: $PID)" return 1 else rm -f $PID_FILE fi fi echo "启动 $APP_NAME..." cd $APP_HOME nohup java $JAVA_OPTS -jar $APP_JAR --spring.profiles.active=prod > $LOG_DIR/app.log 2>&1 & echo $! > $PID_FILE echo "$APP_NAME 启动成功 (PID: $(cat $PID_FILE))" } # 停止函数 stop() { if [ ! -f "$PID_FILE" ]; then echo "$APP_NAME 未运行" return 1 fi PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo "停止 $APP_NAME (PID: $PID)..." kill $PID sleep 3 if ps -p $PID > /dev/null 2>&1; then kill -9 $PID fi rm -f $PID_FILE echo "$APP_NAME 已停止" else echo "$APP_NAME 未运行" rm -f $PID_FILE fi } # 重启函数 restart() { stop sleep 2 start } # 状态检查 status() { if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo "$APP_NAME 正在运行 (PID: $PID)" return 0 else echo "$APP_NAME 未运行" rm -f $PID_FILE return 1 fi else echo "$APP_NAME 未运行" return 1 fi } # 主逻辑 case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "用法: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0