- 新增SysUserController.listUsersByPermission接口 - 新增SysUserService.selectUserListByPermission方法 - 支持多租户和权限关联查询 - 更新变更记录文档
186 lines
5.0 KiB
Bash
Executable File
186 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ==========================================
|
|
# 后端服务启动脚本
|
|
# 功能:按顺序启动后端服务的各个组件
|
|
# 作者:Cursor AI 辅助
|
|
# 时间:2025-01-12
|
|
# 使用:chmod +x start-backend.sh && ./start-backend.sh
|
|
# ==========================================
|
|
|
|
# 脚本配置
|
|
SCRIPT_NAME="start-backend.sh"
|
|
LOG_DIR="logs"
|
|
LOG_FILE="$LOG_DIR/backend-startup-$(date +%Y%m%d-%H%M%S).log"
|
|
BACKEND_DIR="backend"
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 创建日志目录
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
# 日志函数
|
|
log_info() {
|
|
local message="$1"
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
echo -e "${GREEN}[INFO]${NC} $message"
|
|
echo "[$timestamp] [INFO] $message" >> "$LOG_FILE"
|
|
}
|
|
|
|
log_warn() {
|
|
local message="$1"
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
echo -e "${YELLOW}[WARN]${NC} $message"
|
|
echo "[$timestamp] [WARN] $message" >> "$LOG_FILE"
|
|
}
|
|
|
|
log_error() {
|
|
local message="$1"
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
echo -e "${RED}[ERROR]${NC} $message"
|
|
echo "[$timestamp] [ERROR] $message" >> "$LOG_FILE"
|
|
}
|
|
|
|
log_step() {
|
|
local step="$1"
|
|
local message="$2"
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
echo -e "${BLUE}[STEP $step]${NC} $message"
|
|
echo "[$timestamp] [STEP $step] $message" >> "$LOG_FILE"
|
|
}
|
|
|
|
# 执行命令并检查结果
|
|
execute_command() {
|
|
local step="$1"
|
|
local command="$2"
|
|
local description="$3"
|
|
local work_dir="$4"
|
|
|
|
log_step "$step" "开始执行: $description"
|
|
log_info "命令: $command"
|
|
|
|
# 切换到指定目录(如果提供)
|
|
if [ -n "$work_dir" ]; then
|
|
if [ ! -d "$work_dir" ]; then
|
|
log_error "目录不存在: $work_dir"
|
|
return 1
|
|
fi
|
|
log_info "切换到目录: $work_dir"
|
|
cd "$work_dir" || {
|
|
log_error "无法切换到目录: $work_dir"
|
|
return 1
|
|
}
|
|
fi
|
|
|
|
# 执行命令并捕获输出
|
|
local start_time=$(date +%s)
|
|
log_info "开始执行命令..."
|
|
|
|
# 将命令输出同时写入日志文件和控制台
|
|
if eval "$command" 2>&1 | tee -a "$LOG_FILE"; then
|
|
local end_time=$(date +%s)
|
|
local duration=$((end_time - start_time))
|
|
log_info "✅ $description 执行成功 (耗时: ${duration}秒)"
|
|
return 0
|
|
else
|
|
local end_time=$(date +%s)
|
|
local duration=$((end_time - start_time))
|
|
local exit_code=${PIPESTATUS[0]}
|
|
log_error "❌ $description 执行失败 (错误码: $exit_code, 耗时: ${duration}秒)"
|
|
log_error "命令: $command"
|
|
log_error "工作目录: $(pwd)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 清理函数
|
|
cleanup() {
|
|
log_info "脚本执行结束,返回原始目录"
|
|
cd "$(dirname "$0")" || true
|
|
}
|
|
|
|
# 设置错误处理
|
|
trap cleanup EXIT
|
|
|
|
# 脚本开始
|
|
log_info "========================================"
|
|
log_info "后端服务启动脚本开始执行"
|
|
log_info "脚本名称: $SCRIPT_NAME"
|
|
log_info "日志文件: $LOG_FILE"
|
|
log_info "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
log_info "========================================"
|
|
|
|
# 保存原始目录
|
|
ORIGINAL_DIR=$(pwd)
|
|
log_info "原始目录: $ORIGINAL_DIR"
|
|
|
|
# 检查backend目录是否存在
|
|
if [ ! -d "$BACKEND_DIR" ]; then
|
|
log_error "backend目录不存在: $BACKEND_DIR"
|
|
log_error "请确保在项目根目录下执行此脚本"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 1: 清理项目
|
|
if ! execute_command "1" "mvn clean" "Maven清理项目" "$BACKEND_DIR"; then
|
|
log_error "Maven清理失败,停止执行"
|
|
exit 1
|
|
fi
|
|
|
|
# 返回原始目录
|
|
cd "$ORIGINAL_DIR"
|
|
|
|
# Step 2: 编译安装项目
|
|
if ! execute_command "2" "mvn install" "Maven编译安装项目" "$BACKEND_DIR"; then
|
|
log_error "Maven编译安装失败,停止执行"
|
|
exit 1
|
|
fi
|
|
|
|
# 返回原始目录
|
|
cd "$ORIGINAL_DIR"
|
|
|
|
# Step 3: 启动监控服务
|
|
if ! execute_command "3" "./start-monitor.sh" "启动监控服务" "$BACKEND_DIR"; then
|
|
log_error "启动监控服务失败,停止执行"
|
|
exit 1
|
|
fi
|
|
|
|
# 返回原始目录
|
|
cd "$ORIGINAL_DIR"
|
|
|
|
# Step 4: 启动任务调度服务
|
|
if ! execute_command "4" "./start-job.sh" "启动任务调度服务" "$BACKEND_DIR"; then
|
|
log_error "启动任务调度服务失败,停止执行"
|
|
exit 1
|
|
fi
|
|
|
|
# 返回原始目录
|
|
cd "$ORIGINAL_DIR"
|
|
|
|
# Step 5: 热启动主服务
|
|
if ! execute_command "5" "./hot-start.sh" "热启动主服务" "$BACKEND_DIR"; then
|
|
log_error "热启动主服务失败,停止执行"
|
|
exit 1
|
|
fi
|
|
|
|
# 返回原始目录
|
|
cd "$ORIGINAL_DIR"
|
|
|
|
# 脚本成功完成
|
|
log_info "========================================"
|
|
log_info "🎉 后端服务启动脚本执行完成!"
|
|
log_info "所有服务已成功启动:"
|
|
log_info " ✅ Maven项目清理和编译"
|
|
log_info " ✅ 监控服务 (start-monitor.sh)"
|
|
log_info " ✅ 任务调度服务 (start-job.sh)"
|
|
log_info " ✅ 主服务热启动 (hot-start.sh)"
|
|
log_info "结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
log_info "日志文件: $LOG_FILE"
|
|
log_info "========================================"
|
|
|
|
exit 0 |