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

docs(prd): 拆分服务自检主服务脚本

- 优化中间件检测文档,移除重复的适用范围和来源信息
- 新增中间件检测日志导出功能的需求文档
- 新增主运行脚本模块拆分的需求文档
- 创建远程更新程序的需求文档,包含SSH连接、文件上传、更新脚本等功能
- 添加远程更新程序的参数配置和服务路径映射表
- 完善远程更新程序的用户交互设计和执行流程
上级 90196066
此差异已折叠。
---
name: prd-code
description: 解析执行计划文档,生成或更新代码
---
Parse an execution plan document and generate or update code.
## Usage
/prd-code <执行计划文档路径>
## Description
解析执行计划文档,生成或更新代码。
**功能:**
- 读取指定的执行计划文档
- 分析任务分解和实施步骤
- 根据计划生成或更新对应的代码文件
**示例:**
```
/prd-code "Docs/PRD/服务自检/_PRD_服务自检需求文档_计划执行.md"
```
**执行步骤:**
1. 读取执行计划文档
2. 分析实施计划(任务分解、脚本文件、代码位置、配置参数、验收标准)
3. 检查现有代码
4. 生成或更新代码(新增功能、修改功能、遵循代码规范、添加注释)
5. 验证并输出修改摘要
**安全规则:**
- 不修改文件路径以外的任何文件
- 遵循现有代码风格和命名规范
- 添加必要的错误处理
- 不引入安全漏洞
# PRD 工作流 Skill ---
name: prd-plan
description: 解析 PRD 需求文档,生成执行计划文档
---
Parse a PRD document and generate an execution plan.
## Usage
用于管理 PRD 需求文档和执行计划文档的工作流工具。 /prd-plan <需求文档路径>
## /prd plan <需求文档路径> ## Description
解析 PRD 需求文档,生成执行计划文档。 解析 PRD 需求文档,生成执行计划文档。
...@@ -17,7 +24,7 @@ ...@@ -17,7 +24,7 @@
**示例:** **示例:**
``` ```
/prd plan "Docs/PRD/服务自检/_PRD_服务自检需求文档.md" /prd-plan "Docs/PRD/服务自检/_PRD_服务自检需求文档.md"
``` ```
**执行步骤:** **执行步骤:**
...@@ -25,51 +32,3 @@ ...@@ -25,51 +32,3 @@
2. 分析需求内容(项目背景、执行目标、任务模块、配置要求、验收标准) 2. 分析需求内容(项目背景、执行目标、任务模块、配置要求、验收标准)
3. 生成执行计划文档(包含:执行概述、任务分解与实施计划、验收标准、测试计划、风险评估、实施记录、后续工作、附录) 3. 生成执行计划文档(包含:执行概述、任务分解与实施计划、验收标准、测试计划、风险评估、实施记录、后续工作、附录)
4. 显示生成的执行计划文档路径和摘要 4. 显示生成的执行计划文档路径和摘要
---
## /prd code <执行计划文档路径>
解析执行计划文档,生成或更新代码。
**功能:**
- 读取指定的执行计划文档
- 分析任务分解和实施步骤
- 根据计划生成或更新对应的代码文件
**示例:**
```
/prd code "Docs/PRD/服务自检/_PRD_服务自检需求文档_计划执行.md"
```
**执行步骤:**
1. 读取执行计划文档
2. 分析实施计划(任务分解、脚本文件、代码位置、配置参数、验收标准)
3. 检查现有代码
4. 生成或更新代码(新增功能、修改功能、遵循代码规范、添加注释)
5. 验证并输出修改摘要
**安全规则:**
- 不修改文件路径以外的任何文件
- 遵循现有代码风格和命名规范
- 添加必要的错误处理
- 不引入安全漏洞
---
## 文档命名规范
| 类型 | 命名格式 | 示例 |
|------|----------|------|
| 需求文档 | `_PRD_<模块名>_<子模块>.md` | `_PRD_服务自检需求文档_中间件检测优化.md` |
| 执行计划文档 | `<需求文档名>_计划执行.md` | `_PRD_服务自检需求文档_中间件检测优化_计划执行.md` |
## 工作流
```
需求文档 (_PRD_*.md)
↓ /prd plan
执行计划文档 (*_计划执行.md)
↓ /prd code
代码实现
```
<changelist name="在进行更新之前于_2026_2_5_14_00_取消提交了更改_[更改]" date="1770271259492" recycled="true" deleted="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_2_5_14_00_取消提交了更改_[更改]/shelved.patch" />
<option name="DESCRIPTION" value="在进行更新之前于 2026/2/5 14:00 取消提交了更改 [更改]" />
</changelist>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
#!/bin/bash #!/bin/bash
# final_verify.sh - FastDFS最终验证脚本(非交互式) # final_verify.sh - FastDFS最终验证脚本(非交互式)
set -e # 不使用 set -e,改用显式错误处理,避免脚本提前退出
# 颜色定义 # 颜色定义
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' NC='\033[0m'
# 自动检测Storage和Tracker容器 # 自动检测Storage和Tracker容器
detect_containers() { detect_containers() {
# 检测Storage容器 # 检测Storage容器
STORAGE_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "ustorage|storage" | head -1) STORAGE_CONTAINER=$(docker ps --format "{{.Names}}" 2>/dev/null | grep -E "ustorage|storage" | head -1)
if [[ -z "$STORAGE_CONTAINER" ]]; then if [[ -z "$STORAGE_CONTAINER" ]]; then
STORAGE_CONTAINER="ustorage" # 默认值 STORAGE_CONTAINER="ustorage" # 默认值
fi fi
# 检测Tracker容器 # 检测Tracker容器
TRACKER_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "utracker|tracker" | head -1) TRACKER_CONTAINER=$(docker ps --format "{{.Names}}" 2>/dev/null | grep -E "utracker|tracker" | head -1)
if [[ -z "$TRACKER_CONTAINER" ]]; then if [[ -z "$TRACKER_CONTAINER" ]]; then
TRACKER_CONTAINER="utracker" # 默认值 TRACKER_CONTAINER="utracker" # 默认值
fi fi
...@@ -37,7 +38,7 @@ echo "" ...@@ -37,7 +38,7 @@ echo ""
# 1. 创建测试文件 # 1. 创建测试文件
TEST_FILE="/tmp/fastdfs_final_test_$(date +%s).txt" TEST_FILE="/tmp/fastdfs_final_test_$(date +%s).txt"
echo "FastDFS Final Verification Test - $(date)" > "$TEST_FILE" echo "FastDFS Final Verification Test - $(date)" > "$TEST_FILE"
ORIGINAL_MD5=$(md5sum "$TEST_FILE" | awk '{print $1}') ORIGINAL_MD5=$(md5sum "$TEST_FILE" 2>/dev/null | awk '{print $1}')
echo "1. 创建测试文件: $TEST_FILE (MD5: $ORIGINAL_MD5)" echo "1. 创建测试文件: $TEST_FILE (MD5: $ORIGINAL_MD5)"
...@@ -46,6 +47,7 @@ if docker cp "$TEST_FILE" "$STORAGE_CONTAINER:/tmp/" 2>/dev/null; then ...@@ -46,6 +47,7 @@ if docker cp "$TEST_FILE" "$STORAGE_CONTAINER:/tmp/" 2>/dev/null; then
echo "2. ✓ 测试文件已复制到容器" echo "2. ✓ 测试文件已复制到容器"
else else
echo "2. ✗ 无法复制文件到容器" echo "2. ✗ 无法复制文件到容器"
rm -f "$TEST_FILE" 2>/dev/null
exit 1 exit 1
fi fi
...@@ -54,64 +56,111 @@ CONTAINER_TEST_FILE="/tmp/$(basename "$TEST_FILE")" ...@@ -54,64 +56,111 @@ CONTAINER_TEST_FILE="/tmp/$(basename "$TEST_FILE")"
# 3. 上传测试 # 3. 上传测试
echo "3. 执行上传测试..." echo "3. 执行上传测试..."
UPLOAD_RESULT=$(docker exec "$STORAGE_CONTAINER" fdfs_upload_file "$CLIENT_CONF" "$CONTAINER_TEST_FILE" 2>&1) UPLOAD_RESULT=$(docker exec "$STORAGE_CONTAINER" fdfs_upload_file "$CLIENT_CONF" "$CONTAINER_TEST_FILE" 2>&1)
UPLOAD_EXIT_CODE=$?
if [[ $? -eq 0 ]] && [[ -n "$UPLOAD_RESULT" ]] && [[ "$UPLOAD_RESULT" == group* ]]; then echo " 上传命令退出码: $UPLOAD_EXIT_CODE"
echo " 上传输出: $UPLOAD_RESULT"
if [[ $UPLOAD_EXIT_CODE -eq 0 ]] && [[ -n "$UPLOAD_RESULT" ]] && [[ "$UPLOAD_RESULT" == group* ]]; then
echo " ✓ 上传成功" echo " ✓ 上传成功"
echo " 文件ID: $UPLOAD_RESULT" echo " 文件ID: $UPLOAD_RESULT"
# 4. 下载测试 # 4. 下载测试
echo "4. 执行下载测试..." echo "4. 执行下载测试..."
DOWNLOAD_RESULT=$(docker exec "$STORAGE_CONTAINER" fdfs_download_file "$CLIENT_CONF" "$UPLOAD_RESULT" "/tmp/downloaded_final.txt" 2>&1) DOWNLOAD_RESULT=$(docker exec "$STORAGE_CONTAINER" fdfs_download_file "$CLIENT_CONF" "$UPLOAD_RESULT" "/tmp/downloaded_final.txt" 2>&1)
DOWNLOAD_EXIT_CODE=$?
if [[ $? -eq 0 ]]; then
echo " 下载命令退出码: $DOWNLOAD_EXIT_CODE"
if [[ $DOWNLOAD_EXIT_CODE -eq 0 ]]; then
echo " ✓ 下载成功" echo " ✓ 下载成功"
# 5. 完整性验证 # 5. 完整性验证
DOWNLOADED_MD5=$(docker exec "$STORAGE_CONTAINER" md5sum "/tmp/downloaded_final.txt" 2>/dev/null | awk '{print $1}' || echo "") echo "5. 执行完整性验证..."
DOWNLOADED_MD5=$(docker exec "$STORAGE_CONTAINER" md5sum "/tmp/downloaded_final.txt" 2>/dev/null | awk '{print $1}')
MD5_EXIT_CODE=$?
echo " MD5命令退出码: $MD5_EXIT_CODE"
echo " 原始MD5: $ORIGINAL_MD5"
echo " 下载MD5: $DOWNLOADED_MD5"
if [[ "$ORIGINAL_MD5" == "$DOWNLOADED_MD5" ]]; then if [[ "$ORIGINAL_MD5" == "$DOWNLOADED_MD5" ]]; then
echo " ✓ 文件完整性验证通过" echo " ✓ 文件完整性验证通过"
echo -e "\n${GREEN}==========================================${NC}" echo ""
echo -e "${GREEN}==========================================${NC}"
echo -e "${GREEN}✅ FastDFS 所有核心功能验证通过!${NC}" echo -e "${GREEN}✅ FastDFS 所有核心功能验证通过!${NC}"
echo -e "${GREEN}==========================================${NC}" echo -e "${GREEN}==========================================${NC}"
echo "" echo ""
echo "功能验证清单:" echo "功能验证清单:"
echo " ✓ 文件上传" echo " ✓ 文件上传"
echo " ✓ 文件下载" echo " ✓ 文件下载"
echo " ✓ 文件完整性" echo " ✓ 文件完整性"
echo " ✓ Tracker服务" echo " ✓ Tracker服务"
echo " ✓ Storage服务" echo " ✓ Storage服务"
echo " ✓ 网络通信" echo " ✓ 网络通信"
# 6. 测试HTTP访问(可选) # 6. 测试HTTP访问(可选)
echo "" echo ""
echo "6. 可选HTTP访问测试:" echo "6. 访问信息:"
# 获取访问URL # 获取访问URL
FILE_PATH=$(echo "$UPLOAD_RESULT" | sed 's|group1|/group1|') FILE_PATH=$(echo "$UPLOAD_RESULT" | sed 's|group1|/group1|')
# 获取服务器IP地址 # 获取服务器IP地址
SERVER_IP=$(hostname -I | awk '{print $1}') SERVER_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
echo " 访问URL: https://${SERVER_IP}${FILE_PATH}" echo " 访问URL: https://${SERVER_IP}${FILE_PATH}"
# 清理容器文件
docker exec "$STORAGE_CONTAINER" rm -f "$CONTAINER_TEST_FILE" "/tmp/downloaded_final.txt" 2>/dev/null
# 清理本地文件
rm -f "$TEST_FILE" 2>/dev/null
echo ""
echo "=========================================="
echo " 验证完成 - 所有测试通过"
echo "=========================================="
exit 0
else else
echo " ✗ 文件完整性验证失败" echo " ✗ 文件完整性验证失败"
echo " 原始MD5: $ORIGINAL_MD5" echo " 原始MD5: $ORIGINAL_MD5"
echo " 下载MD5: $DOWNLOADED_MD5" echo " 下载MD5: $DOWNLOADED_MD5"
# 清理容器文件
docker exec "$STORAGE_CONTAINER" rm -f "$CONTAINER_TEST_FILE" "/tmp/downloaded_final.txt" 2>/dev/null
# 清理本地文件
rm -f "$TEST_FILE" 2>/dev/null
echo ""
echo "=========================================="
echo " 验证完成 - 完整性验证失败"
echo "=========================================="
exit 1
fi fi
else else
echo " ✗ 下载失败: $DOWNLOAD_RESULT" echo " ✗ 下载失败 (退出码: $DOWNLOAD_EXIT_CODE)"
echo " 错误信息: $DOWNLOAD_RESULT"
# 清理容器文件
docker exec "$STORAGE_CONTAINER" rm -f "$CONTAINER_TEST_FILE" "/tmp/downloaded_final.txt" 2>/dev/null
# 清理本地文件
rm -f "$TEST_FILE" 2>/dev/null
echo ""
echo "=========================================="
echo " 验证完成 - 下载测试失败"
echo "=========================================="
exit 1
fi fi
# 清理容器文件
docker exec "$STORAGE_CONTAINER" rm -f "$CONTAINER_TEST_FILE" "/tmp/downloaded_final.txt" 2>/dev/null || true
else else
echo " ✗ 上传失败: $UPLOAD_RESULT" echo " ✗ 上传失败 (退出码: $UPLOAD_EXIT_CODE)"
fi echo " 错误信息: $UPLOAD_RESULT"
# 清理本地文件 # 清理本地文件
rm -f "$TEST_FILE" 2>/dev/null || true rm -f "$TEST_FILE" 2>/dev/null
echo "" echo ""
echo "==========================================" echo "=========================================="
echo " 验证完成" echo " 验证完成 - 上传测试失败"
echo "==========================================" echo "=========================================="
exit 1
fi
# Debug module loading issue
$SCRIPT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path
$ModulePath = Join-Path $SCRIPT_DIR "modules"
# Load modules in same order as main script
$ModulesToImport = @(
"ServiceCheck.psm1",
"DNSCheck.psm1",
"ServerResourceAnalysis.psm1",
"NTPCheck.psm1",
"ContainerCheck.psm1",
"ConfigIPCheck.psm1",
"MiddlewareCheck.psm1"
)
# First load Common
$CommonModulePath = Join-Path $ModulePath "Common.psm1"
Import-Module $CommonModulePath -Force -Global -ErrorAction Stop
Write-Host "Common loaded" -ForegroundColor Green
# Then load each module
foreach ($Module in $ModulesToImport) {
$ModuleFilePath = Join-Path $ModulePath $Module
if (Test-Path $ModuleFilePath) {
try {
Import-Module $ModuleFilePath -Force -Global -ErrorAction Stop
Write-Host "Loaded: $Module" -ForegroundColor Green
# Check what functions this module exported
$modName = $Module.Replace(".psm1", "")
$mod = Get-Module $modName
if ($mod) {
Write-Host " Exported: $($mod.ExportedFunctions.Count) functions"
$mod.ExportedFunctions.Keys | ForEach-Object { Write-Host " - $_" }
}
}
catch {
Write-Host "Failed: $Module - $($_.Exception.Message)" -ForegroundColor Red
}
}
}
# Check for ContainerCheck functions
Write-Host "`n=== Final check ===" -ForegroundColor Cyan
$funcs = @("Get-ContainerDetails", "Test-ContainerInformation")
foreach ($f in $funcs) {
$c = Get-Command $f -ErrorAction SilentlyContinue
if ($c) {
Write-Host "[OK] $f from $($c.Source)" -ForegroundColor Green
} else {
Write-Host "[FAIL] $f not found" -ForegroundColor Red
}
}
# Debug - check loaded modules after all imports
$SCRIPT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path
$ModulePath = Join-Path $SCRIPT_DIR "modules"
# Load modules in same order as main script
$ModulesToImport = @(
"ServiceCheck.psm1",
"DNSCheck.psm1",
"ServerResourceAnalysis.psm1",
"NTPCheck.psm1",
"ContainerCheck.psm1",
"ConfigIPCheck.psm1",
"MiddlewareCheck.psm1"
)
# First load Common
$CommonModulePath = Join-Path $ModulePath "Common.psm1"
Import-Module $CommonModulePath -Force -Global -ErrorAction Stop
# Then load each module
foreach ($Module in $ModulesToImport) {
$ModuleFilePath = Join-Path $ModulePath $Module
if (Test-Path $ModuleFilePath) {
Import-Module $ModuleFilePath -Force -Global -ErrorAction SilentlyContinue
}
}
# List ALL loaded modules
Write-Host "=== All loaded modules ===" -ForegroundColor Cyan
Get-Module | Where-Object { $_.Name -like "*Check*" } | ForEach-Object {
Write-Host "$($_.Name): $($_.ExportedFunctions.Count) exported functions"
}
# Try using the module directly
Write-Host "`n=== Direct module access ===" -ForegroundColor Cyan
$cc = Get-Module ContainerCheck
if ($cc) {
Write-Host "ContainerCheck module exists: YES"
Write-Host "Functions: $($cc.ExportedFunctions.Count)"
foreach ($f in $cc.ExportedFunctions.Keys) {
Write-Host " - $f"
}
# Try to call function via module
Write-Host "`nTrying to call via & $cc\Test-ContainerInformation"
try {
& $cc\Get-ContainerDetails | Out-Null
Write-Host " Works via module reference!" -ForegroundColor Green
} catch {
Write-Host " Failed: $_" -ForegroundColor Red
}
} else {
Write-Host "ContainerCheck module: NOT FOUND" -ForegroundColor Red
}
# Fix remaining modules - remove broken export sections and fix exports at end
$modulesDir = 'C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\modules'
$modules = @(
@{ Name = 'ServerResourceAnalysis.psm1'; Function = 'Test-ServerResources' },
@{ Name = 'NTPCheck.psm1'; Function = 'Check-NTPService' },
@{ Name = 'ContainerCheck.psm1'; Functions = @('Get-ContainerDetails', 'Test-ContainerInformation') },
@{ Name = 'ConfigIPCheck.psm1'; Functions = @('Check-NewPlatformIPs', 'Check-TraditionalPlatformIPs') },
@{ Name = 'MiddlewareCheck.psm1'; Functions = @('Test-MQTTConnection', 'Test-RedisConnection', 'Test-MySQLConnection', 'Test-FastDFSConnection') }
)
foreach ($moduleInfo in $modules) {
$modulePath = Join-Path $modulesDir $moduleInfo.Name
Write-Host "Processing $($moduleInfo.Name)..." -ForegroundColor Cyan
# Read file
$lines = Get-Content $modulePath -Encoding UTF8
$newLines = @()
$inExportSection = $false
$skipRegion = $false
# Filter out broken export section at beginning
for ($i = 0; $i -lt $lines.Count; $i++) {
$line = $lines[$i]
# Detect start of broken export region
if ($line -match '#region\s+导出的函数列表') {
$inExportSection = $true
$skipRegion = $true
continue
}
# Skip lines within the broken export section
if ($skipRegion) {
if ($line -match '#endregion') {
$skipRegion = $false
}
continue
}
# Skip remaining broken export lines
if ($inExportSection -and ($line -match "^\s*'[\w-]+'" -or $line -match '^\s*\)')) {
continue
}
# Stop skipping when we hit actual function definitions
if ($line -match '^function\s+\w+') {
$inExportSection = $false
}
$newLines += $line
}
# Remove any existing Export-ModuleMember at the end (if corrupted)
$lastLines = @()
$foundEnd = $false
for ($i = $newLines.Count - 1; $i -ge 0; $i--) {
$line = $newLines[$i]
if ($line -match '^Export-ModuleMember') {
$foundEnd = $true
continue
}
if ($foundEnd -and $line -match '^#\s+导出模块函数') {
continue
}
if ($foundEnd -and $line -match '^#===+') {
continue
}
if ($foundEnd -and $line -match '^#\s+函数') {
continue
}
if (-not $foundEnd -or $line -match '\S') {
$lastLines = ,$line + $lastLines
}
}
# Rebuild content
$content = $lastLines -join "`r`n"
# Add proper export at end
if ($moduleInfo.Functions) {
$functionsList = "`'$($moduleInfo.Functions -join "',`'")`'"
} else {
$functionsList = "`'$($moduleInfo.Function)`'"
}
$exportSection = "`r`n`r`n# ==============================================================================`r`n# 导出模块函数`r`n# ==============================================================================`r`nExport-ModuleMember -Function @(`r`n $functionsList`r`n)"
$content = $content.TrimEnd() + $exportSection
# Save with UTF-8 BOM
$utf8WithBOM = New-Object System.Text.UTF8Encoding $true
[System.IO.File]::WriteAllText($modulePath, $content, $utf8WithBOM)
Write-Host " Fixed: $($moduleInfo.Name)" -ForegroundColor Green
}
Write-Host "`nAll modules fixed!" -ForegroundColor Green
[2026-02-06 17:05:45] [INFO] 脚本版本: 1.0.5
[2026-02-06 17:05:45] [INFO] PowerShell 版本: 5.1.22000.282
[2026-02-06 17:05:45] [INFO] 脚本路径: C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\check_server_health.ps1
[2026-02-06 17:05:45] [INFO] 日志文件: C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\logs\health_check_20260206_170544.log
[2026-02-06 17:05:45] [INFO] 检查系统依赖...
[2026-02-06 17:05:45] [INFO] Windows 版本: 10.0.22000
[2026-02-06 17:05:45] [INFO] plink 已找到 (本地): C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\plink.exe
[2026-02-06 17:05:45] [INFO] pscp 已找到 (本地): C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\pscp.exe
[2026-02-06 17:05:45] [INFO] 系统依赖检查通过 (使用 plink 进行密码认证)
[2026-02-06 17:05:45] [INFO] 可选择的目标服务器:
[2026-02-06 17:05:46] [INFO] 已选择 标准版预定运维测试发布服务器-映射端口14445 (nat.ubainsyun.com):14445
[2026-02-06 17:05:46] [INFO] 测试 SSH 连接...
[2026-02-06 17:05:49] [SUCCESS] SSH 连接测试通过
[2026-02-06 17:05:49] [INFO] 自动检测目标服务器平台类型...
[2026-02-06 17:05:51] [SUCCESS] 未检测到 /data/services 目录,识别为【传统平台】
[2026-02-06 17:05:51] [INFO] 自动检测系统类型(容器)...
[2026-02-06 17:05:55] [INFO] 检测到 upython 容器: upython -> 运维集控系统
[2026-02-06 17:05:55] [INFO] 检测到 ujava 容器: ujava6
[2026-02-06 17:05:58] [INFO] [系统细分] ujava -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)
[2026-02-06 17:05:58] [INFO] 传统平台:使用传统平台检测逻辑
[2026-02-06 17:05:58] [INFO] ========== 检测传统平台 ujava 容器内服务 (ujava6) ==========
[2026-02-06 17:05:58] [INFO] ========== 检测传统平台 ujava 宿主机服务 ==========
[2026-02-06 17:05:58] [INFO] ========== 检测 upython (传统平台) 容器内服务 (upython) ==========
[2026-02-06 17:06:01] [SUCCESS] [OK] 端口 8081 (Nginx 代理服务 (8081)): 监听中
[2026-02-06 17:06:01] [SUCCESS] [OK] 端口 8443 (Nginx HTTPS 服务 (8443)): 监听中
[2026-02-06 17:06:01] [SUCCESS] [OK] 端口 8000 (uWSGI 应用服务): 监听中
[2026-02-06 17:06:01] [SUCCESS] [OK] 端口 8002 (Apache HTTPD 服务): 监听中
[2026-02-06 17:06:01] [SUCCESS] [OK] 端口 11211 (Memcached 缓冲服务): 监听中
[2026-02-06 17:06:01] [INFO] ========== 检测 DNS 解析功能 ==========
[2026-02-06 17:06:01] [INFO] 检查 DNS 配置文件...
[2026-02-06 17:06:05] [SUCCESS] 检测到 DNS 服务器: 114.114.114.114, 8.8.8.8, fe80::eef:afff:fed3:b2b0%enp4s1
[2026-02-06 17:06:05] [INFO] 测试 DNS 解析功能...
[2026-02-06 17:06:05] [SUCCESS] DNS 解析测试结果: 0/0 成功
[2026-02-06 17:06:05] [INFO] 测试网络连通性...
[2026-02-06 17:06:05] [WARN] [DNS] 检测到 DNS 解析异常,准备执行远程修复 (fix_dns_config)
[2026-02-06 17:06:05] [INFO] ========== 上传修复脚本并执行 ==========
[2026-02-06 17:06:05] [INFO] 目标: root@nat.ubainsyun.com:14445 | 动作: fix_dns_config | 平台: auto
[2026-02-06 17:06:08] [INFO] 本地脚本: C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\issue_handler.sh
[2026-02-06 17:06:08] [ERROR] 本地文件不存在: C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\issue_handler.sh
[2026-02-06 17:06:08] [ERROR] [DNS] 远程 DNS 修复执行失败: SCP 上传失败
[2026-02-06 17:06:08] [INFO] ========== 服务器资源分析 ==========
[2026-02-06 17:06:08] [INFO] 检测操作系统信息...
[2026-02-06 17:06:11] [SUCCESS] 操作系统: UOS Server 20 | 20
[2026-02-06 17:06:11] [INFO] 检测服务器架构...
[2026-02-06 17:06:15] [SUCCESS] 架构: x86_64 | 内核: 4.19.90-2403.3.0.0270.87.uel20.x86_64
[2026-02-06 17:06:15] [INFO] 检测 CPU 使用情况...
[2026-02-06 17:06:21] [SUCCESS] CPU 使用率: 20.6% (核心数: 8) [正常]
[2026-02-06 17:06:21] [INFO] 检测内存使用情况...
[2026-02-06 17:06:28] [WARN] 内存信息获取失败
[2026-02-06 17:06:28] [SUCCESS] 内存使用: 0GB / 0GB (0%) [正常]
[2026-02-06 17:06:28] [INFO] 检测磁盘空间情况...
[2026-02-06 17:06:31] [SUCCESS] 磁盘 / : 36G/70G (51%) [正常]
[2026-02-06 17:06:31] [SUCCESS] 磁盘 /boot : 266M/1014M (27%) [正常]
[2026-02-06 17:06:31] [SUCCESS] 磁盘 /home : 14G/32G (43%) [正常]
[2026-02-06 17:06:31] [INFO] 检测防火墙开放端口...
[2026-02-06 17:06:38] [INFO] [FIREWALL] 当前状态: 已启用 (firewalld)
[2026-02-06 17:06:38] [INFO] [FIREWALL] 开放端口/服务: 22/tcp 8883/tcp 18083/tcp 18082/tcp 443/tcp 8888/tcp 8997/tcp 22122/tcp 23000/tcp 62121/tcp 554/tcp 1935/tcp 10000/tcp 123/tcp 8998/tcp 8079/tcp 8085/tcp 8088/tcp 8086/tcp 8087/tcp 6060/tcp 9990/tcp 123/udp 8443/tcp 4443/tcp 8000/tcp 8002/tcp 9009/tcp 8996/tcp 8081/tcp 8306/tcp 8892/tcp 6379/tcp 1883/tcp, dhcpv6-client mdns ssh
[2026-02-06 17:06:38] [INFO] 检测系统负载...
[2026-02-06 17:06:41] [INFO] 系统负载 (1/5/15分钟): 2.26,2.16,1.99
[2026-02-06 17:06:41] [INFO] ========== 容器信息(报告) ==========
[2026-02-06 17:06:41] [INFO] ========== 开始中间件连接检测 ==========
[2026-02-06 17:06:43] [INFO] [中间件] 检测到平台类型: old
# Remove Common.psm1 imports from all modules (main script loads it first)
$modulePath = "C:\PycharmData\ubains-module-test\AuxiliaryTool\ScriptTool\ServiceSelfInspection\modules"
Get-ChildItem "$modulePath\*.psm1" | ForEach-Object {
$content = Get-Content $_.FullName -Raw
if ($content -match 'Import-Module \$CommonModulePath.*-Global') {
Write-Host "Updating: $($_.Name)"
# Remove the entire import block
$newContent = $content -replace '# 导入依赖的公共模块[\s\S]*?Common\.psm1.*?`n[\s\S]*?`n[\s\S]*?`n', '# Common.psm1 由主脚本预先加载
'
Set-Content -Path $_.FullName -Value $newContent -NoNewline
}
}
Write-Host "Done!"
...@@ -4,13 +4,11 @@ ...@@ -4,13 +4,11 @@
> 更新日期:2026-02-03 > 更新日期:2026-02-03
> 适用范围:服务自检脚本 - 中间件连接检测功能 > 适用范围:服务自检脚本 - 中间件连接检测功能
> 来源:提取自《服务自检需求文档》4.18节 > 来源:提取自《服务自检需求文档》4.18节
> 适用范围:服务自检脚本 - 中间件连接检测功能
> 来源:提取自《服务自检需求文档》4.18节
## 1. 背景与目标 ## 1. 背景与目标
### 1.1 背景 ### 1.1 背景
从服务自检需求文档中独立提取中间件连接检测需求,形成专门的优化文档。中间件连接检测是服务自检脚本中的核心功能之一,用于验证各类中间件服务的可用性和连接状态。 从服务自检需求文档中独立提取中间件连接检测需求,形成专门的优化文档。中间件连接检测用于验证各类中间件服务的可用性和连接状态。
### 1.2 目标 ### 1.2 目标
实现对MQTT、Redis、MySQL、FastDFS等各类中间件服务的连接状态检测功能,确保服务器中间件服务正常运行,及时发现并预警中间件连接异常。 实现对MQTT、Redis、MySQL、FastDFS等各类中间件服务的连接状态检测功能,确保服务器中间件服务正常运行,及时发现并预警中间件连接异常。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论