Skip to content

日志过多会阻塞的问题 #28

@Unagi-cq

Description

@Unagi-cq

你好!
我写了个start脚本,来启动我的spring boot后端和node前端,在tasktick里面运行该脚本后,我看到日志突然会变得很多,然后app阻塞不可点。怀疑是日志交互或者读取的问题~

我的项目是魔改ruoyi项目的,国内gitee上有这个项目。

下面是我写的启动脚本。

#!/bin/bash
set -e

# ===========================
# 一键启动 (macOS)
# ===========================

# ---- 自动推导项目根目录 ----
ROOT="$(cd "$(dirname "$0")" && pwd)"

# ---- 可配置项 ----
MVN="/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn"
POM="$ROOT/pom.xml"
BACKEND_DIR="$ROOT/ruoyi-admin/target"
BACKEND_JAR="$BACKEND_DIR/ruoyi-admin.jar"
FRONTEND_DIR="$ROOT/ruoyi-ui"
JAVA_OPTS="-XX:TieredStopAtLevel=1 -Dfile.encoding=UTF-8"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# ---- 清理函数 ----
cleanup() {
    echo ""
    echo -e "${YELLOW}正在关闭后端服务...${NC}"
    if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then
        kill "$BACKEND_PID" 2>/dev/null
        wait "$BACKEND_PID" 2>/dev/null
    fi
    echo -e "${GREEN}已关闭所有服务。${NC}"
    exit 0
}
trap cleanup INT TERM

# ---- 1. 检查 MySQL ----
echo -e "${GREEN}[1/4]${NC} 检查 MySQL(端口 3306)..."
if lsof -i :3306 -sTCP:LISTEN >/dev/null 2>&1; then
    echo -e "  ${GREEN}✓${NC} MySQL 已运行"
else
    echo -e "  ${YELLOW}!${NC} MySQL 未运行,尝试通过 brew 启动..."
    /opt/homebrew/bin/brew services start mysql 2>/dev/null || {
        echo -e "${RED}✗ 无法启动 MySQL,请手动启动后重试${NC}"
        exit 1
    }
    sleep 3
    echo -e "  ${GREEN}✓${NC} MySQL 已启动"
fi

# ---- 2. 检查 Redis ----
echo -e "${GREEN}[2/4]${NC} 检查 Redis(端口 6379)..."
if lsof -i :6379 -sTCP:LISTEN >/dev/null 2>&1; then
    echo -e "  ${GREEN}✓${NC} Redis 已运行"
else
    echo -e "  ${YELLOW}!${NC} Redis 未运行,尝试通过 brew 启动..."
    /opt/homebrew/bin/brew services start redis 2>/dev/null || {
        echo -e "${RED}✗ 无法启动 Redis,请手动启动后重试${NC}"
        exit 1
    }
    sleep 2
    echo -e "  ${GREEN}✓${NC} Redis 已启动"
fi

# ---- 3. 启动后端 ----
echo -e "${GREEN}[3/4]${NC} 启动后端..."

if [ ! -f "$BACKEND_JAR" ]; then
    echo -e "  ${YELLOW}!${NC} 未找到后端 jar,开始编译..."
    cd "$ROOT"
    "$MVN" -f "$POM" clean package -DskipTests -q
    echo -e "  ${GREEN}✓${NC} 编译完成"
fi

echo -e "  → 启动 Spring Boot(端口 8080)..."
java $JAVA_OPTS -jar "$BACKEND_JAR" &
BACKEND_PID=$!

# 等待后端就绪
echo -n "  → 等待后端就绪"
for i in $(seq 1 30); do
    if curl -s http://localhost:8080 >/dev/null 2>&1; then
        echo ""
        echo -e "  ${GREEN}✓${NC} 后端启动成功"
        break
    fi
    sleep 2
    echo -n "."
done
if ! kill -0 "$BACKEND_PID" 2>/dev/null; then
    echo ""
    echo -e "${RED}✗ 后端启动失败,请检查日志${NC}"
    exit 1
fi

# ---- 4. 启动前端 ----
echo -e "${GREEN}[4/4]${NC} 启动前端..."

if [ ! -d "$FRONTEND_DIR/node_modules" ]; then
    echo -e "  ${YELLOW}!${NC} 首次运行,安装前端依赖..."
    cd "$FRONTEND_DIR"
    npm install
fi

echo -e "  → 启动 Vue 开发服务器(端口 80)..."
echo -e "  ${GREEN}✓${NC} 浏览器将自动打开 http://localhost"
echo ""
cd "$FRONTEND_DIR"
npm run dev &
FRONTEND_PID=$!

# ---- 等待进程退出 ----
echo -e "${YELLOW}按 Ctrl+C 停止所有服务${NC}"
wait $FRONTEND_PID 2>/dev/null
cleanup

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions