247 lines
5.8 KiB
Bash
247 lines
5.8 KiB
Bash
#!/bin/bash
|
|
|
|
# AIGC Backend 启动脚本
|
|
# 使用方法: ./startup.sh [start|stop|restart|status]
|
|
|
|
# 应用配置
|
|
APP_NAME="aigc-backend"
|
|
JAR_NAME="aigc-backend-0.0.1-SNAPSHOT.jar"
|
|
# 可以通过环境变量覆盖 JAR 路径
|
|
JAR_PATH="${JAR_PATH:-$JAR_NAME}"
|
|
|
|
# Java 路径配置
|
|
# 如果系统中 java 命令不在 PATH 中,可以在这里指定完整路径
|
|
# 宝塔面板默认 Java 路径: /www/server/java/jdk1.8.0_371/bin/java
|
|
JAVA_CMD="${JAVA_CMD:-/www/server/java/jdk1.8.0_371/bin/java}"
|
|
|
|
# 检查 Java 是否可用
|
|
check_java() {
|
|
if ! command -v ${JAVA_CMD} &> /dev/null; then
|
|
echo -e "${RED}错误: 找不到 Java 命令${NC}"
|
|
echo "请确保 Java 已安装并配置在 PATH 中"
|
|
echo "或者设置 JAVA_CMD 环境变量指定 Java 路径"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " export JAVA_CMD=/usr/local/java/bin/java"
|
|
echo " ./startup.sh start"
|
|
exit 1
|
|
fi
|
|
|
|
# 显示 Java 版本
|
|
echo "Java 版本:"
|
|
${JAVA_CMD} -version 2>&1 | head -n 1
|
|
echo ""
|
|
}
|
|
|
|
# JVM 参数配置
|
|
JVM_OPTS="${JVM_OPTS:--Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200}"
|
|
|
|
# Spring Boot 配置
|
|
SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE:-prod}"
|
|
SERVER_PORT="${SERVER_PORT:-20006}"
|
|
|
|
# 日志配置
|
|
LOG_DIR="logs"
|
|
LOG_FILE="${LOG_DIR}/${APP_NAME}.log"
|
|
PID_FILE="${APP_NAME}.pid"
|
|
|
|
# 创建日志目录
|
|
mkdir -p ${LOG_DIR}
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 检查 JAR 文件是否存在
|
|
check_jar() {
|
|
if [ ! -f "${JAR_PATH}" ]; then
|
|
echo -e "${RED}错误: JAR 文件不存在: ${JAR_PATH}${NC}"
|
|
echo "请确保已经执行 mvn clean package 构建项目"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 获取进程 ID
|
|
get_pid() {
|
|
if [ -f "${PID_FILE}" ]; then
|
|
cat "${PID_FILE}"
|
|
fi
|
|
}
|
|
|
|
# 检查应用是否运行
|
|
is_running() {
|
|
local pid=$(get_pid)
|
|
if [ -n "$pid" ] && ps -p $pid > /dev/null 2>&1; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 启动应用
|
|
start() {
|
|
check_java
|
|
check_jar
|
|
|
|
if is_running; then
|
|
local pid=$(get_pid)
|
|
echo -e "${YELLOW}应用已经在运行中 (PID: $pid)${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${GREEN}正在启动 ${APP_NAME}...${NC}"
|
|
echo "JAR 文件: ${JAR_PATH}"
|
|
echo "JVM 参数: ${JVM_OPTS}"
|
|
echo "Spring Profile: ${SPRING_PROFILES_ACTIVE}"
|
|
echo "启动端口: ${SERVER_PORT}"
|
|
echo "日志文件: ${LOG_FILE}"
|
|
|
|
# 启动应用
|
|
nohup ${JAVA_CMD} ${JVM_OPTS} \
|
|
-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE} \
|
|
-Dserver.port=${SERVER_PORT} \
|
|
-jar ${JAR_PATH} \
|
|
> ${LOG_FILE} 2>&1 &
|
|
|
|
# 保存 PID
|
|
echo $! > ${PID_FILE}
|
|
|
|
# 等待应用启动
|
|
sleep 3
|
|
|
|
if is_running; then
|
|
local pid=$(get_pid)
|
|
echo -e "${GREEN}✓ ${APP_NAME} 启动成功 (PID: $pid)${NC}"
|
|
echo "查看日志: tail -f ${LOG_FILE}"
|
|
else
|
|
echo -e "${RED}✗ ${APP_NAME} 启动失败${NC}"
|
|
echo "请查看日志文件: ${LOG_FILE}"
|
|
rm -f ${PID_FILE}
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 停止应用
|
|
stop() {
|
|
if ! is_running; then
|
|
echo -e "${YELLOW}应用未运行${NC}"
|
|
rm -f ${PID_FILE}
|
|
exit 0
|
|
fi
|
|
|
|
local pid=$(get_pid)
|
|
echo -e "${YELLOW}正在停止 ${APP_NAME} (PID: $pid)...${NC}"
|
|
|
|
# 发送 TERM 信号
|
|
kill $pid
|
|
|
|
# 等待进程结束
|
|
local count=0
|
|
while is_running && [ $count -lt 30 ]; do
|
|
sleep 1
|
|
count=$((count + 1))
|
|
echo -n "."
|
|
done
|
|
echo ""
|
|
|
|
if is_running; then
|
|
echo -e "${RED}应用未能正常停止,强制终止...${NC}"
|
|
kill -9 $pid
|
|
sleep 1
|
|
fi
|
|
|
|
if is_running; then
|
|
echo -e "${RED}✗ 停止失败${NC}"
|
|
exit 1
|
|
else
|
|
echo -e "${GREEN}✓ ${APP_NAME} 已停止${NC}"
|
|
rm -f ${PID_FILE}
|
|
fi
|
|
}
|
|
|
|
# 重启应用
|
|
restart() {
|
|
echo -e "${GREEN}重启 ${APP_NAME}...${NC}"
|
|
stop
|
|
sleep 2
|
|
start
|
|
}
|
|
|
|
# 查看状态
|
|
status() {
|
|
if is_running; then
|
|
local pid=$(get_pid)
|
|
echo -e "${GREEN}${APP_NAME} 正在运行 (PID: $pid)${NC}"
|
|
|
|
# 显示进程信息
|
|
echo ""
|
|
echo "进程信息:"
|
|
ps -f -p $pid
|
|
|
|
# 显示最近的日志
|
|
if [ -f "${LOG_FILE}" ]; then
|
|
echo ""
|
|
echo "最近日志 (最后 10 行):"
|
|
tail -n 10 ${LOG_FILE}
|
|
fi
|
|
else
|
|
echo -e "${RED}${APP_NAME} 未运行${NC}"
|
|
rm -f ${PID_FILE}
|
|
fi
|
|
}
|
|
|
|
# 查看日志
|
|
logs() {
|
|
if [ -f "${LOG_FILE}" ]; then
|
|
tail -f ${LOG_FILE}
|
|
else
|
|
echo -e "${RED}日志文件不存在: ${LOG_FILE}${NC}"
|
|
fi
|
|
}
|
|
|
|
# 主函数
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
restart
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
logs)
|
|
logs
|
|
;;
|
|
*)
|
|
echo "使用方法: $0 {start|stop|restart|status|logs}"
|
|
echo ""
|
|
echo "命令说明:"
|
|
echo " start - 启动应用"
|
|
echo " stop - 停止应用"
|
|
echo " restart - 重启应用"
|
|
echo " status - 查看应用状态"
|
|
echo " logs - 实时查看日志"
|
|
echo ""
|
|
echo "环境变量:"
|
|
echo " JAR_PATH - JAR 文件路径 (默认: ${JAR_NAME})"
|
|
echo " JVM_OPTS - JVM 参数 (默认: -Xms512m -Xmx1024m)"
|
|
echo " SPRING_PROFILES_ACTIVE - Spring 配置文件 (默认: prod)"
|
|
echo " SERVER_PORT - 启动端口 (默认: 20006)"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " ./startup.sh start"
|
|
echo " JVM_OPTS='-Xms1g -Xmx2g' ./startup.sh start"
|
|
echo " SERVER_PORT=8080 ./startup.sh start"
|
|
echo " SPRING_PROFILES_ACTIVE=dev ./startup.sh restart"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|