#!/bin/bash # # SmartClean 启动脚本 # 用法: # ./start.sh # 启动所有服务 (public编译 + web + task + frontend) # ./start.sh web # 仅启动后端 web 服务 # ./start.sh task # 仅启动后端 task 服务 # ./start.sh front # 仅启动前端 # ./start.sh backend # 启动后端 web + task # ./start.sh stop # 停止所有服务 # 初始化 SDKMAN 并切换 Java 8 export SDKMAN_DIR="$HOME/.sdkman" source "$SDKMAN_DIR/bin/sdkman-init.sh" sdk use java 8.0.432-zulu > /dev/null 2>&1 ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" PUBLIC_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-public" WEB_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-web" TASK_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-task" FRONT_DIR="$ROOT_DIR/frontend/witcleansystem" LOG_DIR="$ROOT_DIR/logs" PROFILE="test" mkdir -p "$LOG_DIR" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } install_public() { log_info "编译安装 public 模块..." cd "$PUBLIC_DIR" && mvn clean install -q -DskipTests if [ $? -ne 0 ]; then log_error "public 模块编译失败" exit 1 fi log_info "public 模块编译完成" } start_web() { log_info "启动 Web 服务 (端口 8095, profile=$PROFILE)..." cd "$WEB_DIR" mvn spring-boot:run -Dspring-boot.run.profiles=$PROFILE -q > "$LOG_DIR/web.log" 2>&1 & echo $! > "$LOG_DIR/web.pid" log_info "Web 服务已启动, PID=$(cat "$LOG_DIR/web.pid"), 日志: $LOG_DIR/web.log" } start_task() { log_info "启动 Task 服务 (端口 8097, profile=$PROFILE)..." cd "$TASK_DIR" mvn spring-boot:run -Dspring-boot.run.profiles=$PROFILE -q > "$LOG_DIR/task.log" 2>&1 & echo $! > "$LOG_DIR/task.pid" log_info "Task 服务已启动, PID=$(cat "$LOG_DIR/task.pid"), 日志: $LOG_DIR/task.log" } start_front() { log_info "启动前端开发服务 (端口 8079)..." cd "$FRONT_DIR" if [ ! -d "node_modules" ]; then log_warn "未检测到 node_modules, 正在安装依赖..." npm install fi npm run dev > "$LOG_DIR/front.log" 2>&1 & echo $! > "$LOG_DIR/front.pid" log_info "前端服务已启动, PID=$(cat "$LOG_DIR/front.pid"), 日志: $LOG_DIR/front.log" } stop_all() { log_info "停止所有服务..." for name in web task front; do pid_file="$LOG_DIR/$name.pid" if [ -f "$pid_file" ]; then pid=$(cat "$pid_file") if kill -0 "$pid" 2>/dev/null; then kill "$pid" log_info "已停止 $name 服务 (PID=$pid)" fi rm -f "$pid_file" fi done } case "${1:-all}" in web) install_public start_web ;; task) install_public start_task ;; backend) install_public start_web start_task ;; front) start_front ;; all) install_public start_web start_task start_front ;; stop) stop_all ;; *) echo "用法: $0 {all|web|task|backend|front|stop}" exit 1 ;; esac echo "" log_info "========================================" log_info " 前端: http://localhost:8079" log_info " Web: http://localhost:8095" log_info " Task: http://localhost:8097" log_info "========================================"