Files
hzdyjs/start-backend.sh
T
wuzhen 661a513f57 feat: 新增根据权限标识获取用户列表功能
- 新增SysUserController.listUsersByPermission接口
- 新增SysUserService.selectUserListByPermission方法
- 支持多租户和权限关联查询
- 更新变更记录文档
2025-07-10 17:59:31 +08:00

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