jmalcloud/stop-full-project.sh
lanmus d5f11e43bd 🚀 完善前后端启动脚本和文档
✨ 新增启动脚本:
- start-full-project.sh: 完整的前后端启动脚本,含环境检查
- dev-start.sh: 开发环境快速启动脚本
- stop-full-project.sh: 停止所有服务的脚本

📖 新增文档:
- STARTUP_GUIDE.md: 详细的启动指南和故障排除
- 更新 README.md: 添加项目结构说明和启动脚本介绍

🔧 功能特点:
- ✅ 自动环境检查(Java、Node.js、MongoDB)
- ✅ 智能进程管理和端口清理
- ✅ 详细的启动日志和状态检查
- ✅ 交互式和静默启动模式
- ✅ 完整的故障排除指南

🎯 适配新项目结构:
- 后端:项目根目录 (Spring Boot)
- 前端:frontend/ 子目录 (Vue.js)
- 一键启动完整的前后端开发环境

📋 三种启动方式:
1. dev-start.sh - 开发快速启动 ⭐ 推荐
2. start-full-project.sh - 完整启动检查
3. 手动分别启动 - 调试使用

现在开发者只需一个命令即可启动完整的前后端开发环境!
2025-08-24 12:19:47 +08:00

102 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# JmalCloud 完整前后端停止脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
BACKEND_PORT=${BACKEND_PORT:-8088}
FRONTEND_PORT=${FRONTEND_PORT:-9528}
echo -e "${BLUE}🛑 JmalCloud 服务停止脚本${NC}"
echo -e "${BLUE}=============================${NC}"
# 停止Java后端进程
echo -e "${YELLOW}🔧 停止后端服务...${NC}"
java_pids=$(ps aux | grep 'java.*spring-boot:run\|java.*clouddisk' | grep -v grep | awk '{print $2}')
if [ ! -z "$java_pids" ]; then
echo "发现Java进程: $java_pids"
echo $java_pids | xargs kill -15
sleep 3
# 检查是否还有进程存在
remaining_java=$(ps aux | grep 'java.*spring-boot:run\|java.*clouddisk' | grep -v grep | awk '{print $2}')
if [ ! -z "$remaining_java" ]; then
echo "强制终止Java进程: $remaining_java"
echo $remaining_java | xargs kill -9
fi
echo -e "${GREEN}✅ 后端服务已停止${NC}"
else
echo -e "${GREEN}✅ 未发现运行中的后端服务${NC}"
fi
# 停止Node.js前端进程
echo -e "${YELLOW}🎨 停止前端服务...${NC}"
node_pids=$(ps aux | grep 'node.*vue-cli-service\|npm.*dev' | grep -v grep | awk '{print $2}')
if [ ! -z "$node_pids" ]; then
echo "发现Node.js进程: $node_pids"
echo $node_pids | xargs kill -15
sleep 3
# 检查是否还有进程存在
remaining_node=$(ps aux | grep 'node.*vue-cli-service\|npm.*dev' | grep -v grep | awk '{print $2}')
if [ ! -z "$remaining_node" ]; then
echo "强制终止Node.js进程: $remaining_node"
echo $remaining_node | xargs kill -9
fi
echo -e "${GREEN}✅ 前端服务已停止${NC}"
else
echo -e "${GREEN}✅ 未发现运行中的前端服务${NC}"
fi
# 清理端口占用
echo -e "${YELLOW}🧹 清理端口占用...${NC}"
for port in $BACKEND_PORT $FRONTEND_PORT; do
pid=$(lsof -ti:$port 2>/dev/null || true)
if [ ! -z "$pid" ]; then
echo "清理端口 $port 占用进程: $pid"
kill -9 $pid 2>/dev/null || true
echo -e "${GREEN}✅ 端口 $port 已清理${NC}"
fi
done
# 清理日志文件(可选)
echo -e "${YELLOW}🗑️ 清理日志文件...${NC}"
if [ -f "backend.log" ]; then
> backend.log
echo -e "${GREEN}✅ 后端日志已清理${NC}"
fi
if [ -f "frontend.log" ]; then
> frontend.log
echo -e "${GREEN}✅ 前端日志已清理${NC}"
fi
echo -e "${GREEN}🎉 所有服务已停止!${NC}"
echo -e "${BLUE}=============================${NC}"
echo -e "${GREEN}📋 状态检查:${NC}"
# 最终检查
backend_check=$(lsof -ti:$BACKEND_PORT 2>/dev/null || echo "")
frontend_check=$(lsof -ti:$FRONTEND_PORT 2>/dev/null || echo "")
if [ -z "$backend_check" ]; then
echo -e "${GREEN}✅ 后端端口 $BACKEND_PORT 已释放${NC}"
else
echo -e "${RED}❌ 后端端口 $BACKEND_PORT 仍被占用${NC}"
fi
if [ -z "$frontend_check" ]; then
echo -e "${GREEN}✅ 前端端口 $FRONTEND_PORT 已释放${NC}"
else
echo -e "${RED}❌ 前端端口 $FRONTEND_PORT 仍被占用${NC}"
fi
echo ""
echo -e "${YELLOW}💡 提示: 如需重新启动,请运行 ./start-full-project.sh${NC}"