#!/bin/bash # 情感博物馆微服务启动脚本 # 支持环境参数控制 # 默认环境 DEFAULT_ENV="local" ENV=${1:-$DEFAULT_ENV} echo "==========================================" echo "情感博物馆微服务启动脚本" echo "启动环境: $ENV" echo "==========================================" # 检查基础服务 check_services() { echo "📊 检查基础服务..." if ! nc -z localhost 3306; then echo "❌ MySQL服务未启动,请先启动MySQL服务" echo "可以使用: brew services start mysql" exit 1 fi if ! nc -z localhost 6379; then echo "❌ Redis服务未启动,请先启动Redis服务" echo "可以使用: brew services start redis" exit 1 fi echo "✅ 基础服务检查通过" } # 启动服务函数 start_service() { local service_name=$1 local port=$2 local description=$3 echo "🚀 启动 $description ($service_name:$port)..." cd $service_name # 检查端口是否被占用 if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then echo "⚠️ 端口 $port 已被占用,跳过 $service_name" cd .. return fi # 编译项目 echo "📦 编译 $service_name..." mvn clean package -DskipTests -q if [ $? -ne 0 ]; then echo "❌ $service_name 编译失败" cd .. return fi # 启动服务 echo "🔄 启动 $service_name (环境: $ENV)..." nohup java -jar -Dspring.profiles.active=$ENV target/$service_name-1.0.0.jar > ../logs/$service_name-$ENV.log 2>&1 & # 记录PID echo $! > ../logs/$service_name.pid echo "✅ $service_name 启动完成,PID: $!" echo "📋 日志文件: logs/$service_name-$ENV.log" cd .. # 等待服务启动 sleep 3 } # 创建日志目录 mkdir -p logs # 检查基础服务 check_services # 服务列表 services=( "emotion-user:19001:用户服务" "emotion-ai:19002:AI服务" "emotion-websocket:19007:WebSocket聊天服务" "emotion-gateway:19000:网关服务" ) echo "🚀 开始启动核心服务 (环境: $ENV)..." # 按顺序启动服务 for service_info in "${services[@]}"; do IFS=':' read -r service_name port description <<< "$service_info" start_service "$service_name" "$port" "$description" done echo "" echo "🎉 核心服务启动完成!" echo "" echo "📋 服务列表:" for service_info in "${services[@]}"; do IFS=':' read -r service_name port description <<< "$service_info" echo " $description: http://localhost:$port" done echo "" echo "📝 使用 './stop-services.sh' 停止所有服务" echo "📝 查看日志: tail -f logs/服务名-$ENV.log" # 等待服务完全启动 echo "" echo "📊 等待服务完全启动..." sleep 15 # 检查服务状态 echo "📊 检查服务状态..." for service_info in "${services[@]}"; do IFS=':' read -r service_name port description <<< "$service_info" if curl -s http://localhost:$port/actuator/health >/dev/null 2>&1; then echo "✅ $description 运行正常" else echo "⚠️ $description 可能未完全启动,请查看日志: tail -f logs/$service_name-$ENV.log" fi done echo "" echo "🎉 启动完成!环境: $ENV" echo "" echo "使用方法:" echo " ./start-services.sh # 使用默认local环境启动" echo " ./start-services.sh dev # 使用dev环境启动" echo " ./start-services.sh prod # 使用prod环境启动"