提交 027ae153 authored 作者: 陈泽健's avatar 陈泽健

docs(deployment): 更新ARM架构部署脚本并添加服务自检模块转换需求文档

- 修改ARM自动部署脚本中的镜像文件扩展名为.tar
- 创建服务自检模块化拆分转换shell脚本需求文档
- 定义PowerShell到Shell脚本的技术映射方案
- 规划模块转换优先级和执行计划
- 设计新的目录结构和配置管理机制
- 制定测试验证和风险评估计划
上级 53fc1138
# _PRD_服务自检模块化拆分转换shell脚本_需求文档_计划执行
> PRD来源: `Docs/PRD/服务自检/需求文档/_PRD_服务自检模块化拆分转换shell脚本_需求文档.md`
---
## 1. 需求分析
### 1.1 转换目标
将现有的PowerShell模块化脚本转换为Shell脚本,实现跨平台支持,减少维护成本。
### 1.2 现有模块清单
| PowerShell模块 | 文件大小 | 主要功能 |
|----------------|----------|----------|
| Common.psm1 | 16KB | 日志、SSH命令、文件上传等基础函数 |
| ServiceCheck.psm1 | 23KB | ujava/upython服务检测 |
| ContainerCheck.psm1 | 20KB | Docker容器检测 |
| DNSCheck.psm1 | 12KB | DNS解析检测 |
| ServerResourceAnalysis.psm1 | 22KB | CPU/内存/磁盘资源分析 |
| NTPCheck.psm1 | 13KB | NTP时间同步检测 |
| AndroidCheck.psm1 | 11KB | 安卓设备检测 |
| LogExport.psm1 | 20KB | 服务日志导出 |
| MiddlewareCheck.psm1 | 47KB | MQTT/Redis/MySQL/FastDFS中间件检测 |
| ConfigIPCheck.psm1 | 24KB | 配置文件IP检测 |
| Report.psm1 | 23KB | 健康检查报告生成 |
### 1.3 目标目录结构
```
AuxiliaryTool/ScriptTool/服务器监测/
├── check_server_health.sh # 主Shell脚本
├── lib/ # 检测模块库目录
│ ├── config.sh # 配置文件
│ ├── common.sh # 通用函数库
│ ├── system/ # 系统基础检测模块
│ ├── service/ # 服务层检测模块
│ └── utils/ # 工具脚本
└── reports/ # 报告输出目录
```
---
## 2. 技术方案
### 2.1 转换策略
#### 阶段一:基础框架搭建
- 创建Shell脚本基础框架
- 实现日志和SSH命令基础函数
- 建立配置管理机制
#### 阶段二:核心模块转换
- Common.psm1 → lib/common.sh
- ServiceCheck.psm1 → lib/service/java_check.sh
- ContainerCheck.psm1 → lib/service/docker_check.sh
#### 阶段三:检测模块转换
- DNSCheck.psm1 → lib/system/dns_check.sh
- ServerResourceAnalysis.psm1 → lib/system/resource_check.sh
- NTPCheck.psm1 → lib/system/ntp_check.sh
#### 阶段四:中间件和报告模块转换
- MiddlewareCheck.psm1 → lib/service/middleware_check.sh
- LogExport.psm1 → lib/utils/log_export.sh
- Report.psm1 → lib/utils/report.sh
### 2.2 关键技术映射
| PowerShell特性 | Shell等价实现 |
|----------------|---------------|
| `Write-Log` | `log_info()`, `log_error()`, `log_warn()` |
| `Invoke-SSHCommand` | `ssh_exec()` 函数封装 |
| `hashtable` | 关联数组或JSON配置 |
| `try/catch` | `if [ $? -ne 0 ]; then ... fi` |
| `Import-Module` | `source lib/common.sh` |
### 2.3 SSH连接方式差异
| 平台 | SSH工具 | 密码认证方式 |
|------|---------|-------------|
| PowerShell | plink.exe | `-pw password` |
| Shell | sshpass | `sshpass -p password ssh` |
| Shell(无sshpass) | expect | 自动化交互脚本 |
---
## 3. 执行计划
### 3.1 模块转换优先级
**第一批(核心基础)**:
- [ ] Common.psm1 → lib/common.sh
- [ ] 主脚本框架搭建
- [ ] 配置文件 lib/config.sh
**第二批(服务检测)**:
- [ ] ServiceCheck.psm1 → lib/service/java_check.sh
- [ ] ContainerCheck.psm1 → lib/service/docker_check.sh
- [ ] MiddlewareCheck.psm1 → lib/service/middleware_check.sh
**第三批(系统检测)**:
- [ ] ServerResourceAnalysis.psm1 → lib/system/resource_check.sh
- [ ] DNSCheck.psm1 → lib/system/dns_check.sh
- [ ] NTPCheck.psm1 → lib/system/ntp_check.sh
**第四批(辅助工具)**:
- [ ] LogExport.psm1 → lib/utils/log_export.sh
- [ ] Report.psm1 → lib/utils/report.sh
- [ ] AndroidCheck.psm1 → lib/utils/android_check.sh
- [ ] ConfigIPCheck.psm1 → lib/system/config_check.sh
### 3.2 详细转换步骤
#### 步骤1: 创建基础框架
```bash
# 目录结构创建
mkdir -p AuxiliaryTool/ScriptTool/服务器监测/lib/{system,service,utils}
# 创建主脚本
touch AuxiliaryTool/ScriptTool/服务器监测/check_server_health.sh
```
#### 步骤2: 实现common.sh(日志和SSH)
```bash
# 日志函数
log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] $1" | tee -a $LOG_FILE; }
log_error() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $1" | tee -a $LOG_FILE; }
log_warn() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [WARN] $1" | tee -a $LOG_FILE; }
log_success() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [SUCCESS] $1" | tee -a $LOG_FILE; }
# SSH执行函数
ssh_exec() {
local cmd=$1
if [ "$USE_SSHPASS" = "true" ]; then
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p $PORT $USER@$IP "$cmd"
else
expect <<EOF
set timeout 30
spawn ssh -p $PORT $USER@$IP
expect "password:"
send "$PASSWORD\r"
expect "$USER@*"
send "$cmd\r"
expect eof
EOF
fi
}
```
#### 步骤3: 配置文件转换
```bash
# lib/config.sh
# 服务器列表配置
SERVERS=(
"192.168.5.48:22:root:password123:标准版预定运维服务器"
"192.168.5.44:22:root:password123:新统一平台测试服务器"
)
# 容器配置
UJAVA_CONTAINER="ujava2"
UPYTHON_CONTAINER="upython"
UPYTHON_VOICE_CONTAINER="upython_voice"
# 服务进程配置(关联数组)
declare -A UJAVA_SERVICES
UJAVA_SERVICES["auth"]="ubains-auth.jar"
UJAVA_SERVICES["gateway"]="ubains-gateway.jar"
# ...
```
### 3.3 功能兼容性保证
| 功能 | PowerShell实现 | Shell实现 | 兼容性说明 |
|------|----------------|-----------|-----------|
| 日志输出 | Write-Log | log_info/error/warn/success | 完全兼容 |
| SSH命令 | Invoke-SSHCommand | ssh_exec | 需处理sshpass/expect |
| 容器检测 | docker exec | docker exec | 命令格式相同 |
| 进程检测 | ps aux | ps aux | 命令格式相同 |
| 端口检测 | netstat/ss | netstat/ss | 命令格式相同 |
---
## 4. 测试验证计划
### 4.1 单元测试
- [ ] 日志函数测试
- [ ] SSH连接测试
- [ ] 配置文件加载测试
### 4.2 集成测试
- [ ] 新统一平台完整检测流程
- [ ] 传统平台完整检测流程
- [ ] 报告生成测试
### 4.3 兼容性测试
- [ ] CentOS 7/8 测试
- [ ] Ubuntu 18.04/20.04 测试
- [ ] ARM架构服务器测试
---
## 5. 风险评估
| 风险项 | 风险等级 | 缓解措施 |
|--------|----------|----------|
| SSH密码认证差异 | 中 | 支持sshpass和expect两种方式 |
| PowerShell特有语法 | 高 | 使用Shell等价语法重新实现 |
| 模块依赖关系 | 中 | 仔细梳理依赖顺序,使用source加载 |
| Windows客户端兼容性 | 低 | Shell脚本用于Linux服务器检测 |
---
## 6. 优化功能回填
| 优化项 | 状态 | 说明 |
|--------|------|------|
| 基础框架搭建 | 待实施 | 目录结构、主脚本框架 |
| Common模块转换 | 待实施 | 日志、SSH、文件上传函数 |
| 配置文件转换 | 待实施 | 服务器列表、服务配置 |
| ServiceCheck转换 | 待实施 | Java服务检测逻辑 |
| ContainerCheck转换 | 待实施 | Docker容器检测逻辑 |
| 报告生成转换 | 待实施 | Markdown报告生成 |
---
*文档生成时间: 2026-05-13*
......@@ -8,7 +8,7 @@ function java_arm()
# ------------------- 定义变量 -------------------
local container_name="ujava2"
local image_tar="/data/temp/arm_java1.8.0_321.tar.gz"
local image_tar="/data/temp/arm_java1.8.0_321.tar"
local image_name="139.9.60.86:5000/ujava:v4"
local image_id="5772d73fd433"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论