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

feat(scripts): 新增console配置检测功能

- 在auto_crontab_settings.sh中添加health_check任务定义
- 在check_server_health.ps1中集成NewPlatformConsole和TraditionalPlatformConsole检测
- 在check_server_health.sh中新增test_config_console函数实现console配置修复
- 更新PowerShell模块ConfigIPCheck.psm1添加console配置检查功能
- 修改Report.psm1添加console检测结果报告输出
- 在crontab设置中强制启用health_check任务且不支持禁用
上级 644b16ea
......@@ -348,6 +348,8 @@ $ExpectedFunctions = @(
"Test-FastDFSConnection",
"Test-NewPlatformIPs",
"Test-TraditionalPlatformIPs",
"Test-NewPlatformConsole",
"Test-TraditionalPlatformConsole",
"Test-NTPService",
"Test-AndroidDeviceHealth",
"Export-ServiceLogs",
......@@ -1379,6 +1381,16 @@ function Main {
}
Write-Log -Level "INFO" -Message "========== 结束检测配置文件 IP =========="
# 检测配置文件中的console配置
Write-Host ""
Write-Log -Level "INFO" -Message "========== 开始检测console配置 =========="
if ($platformType -eq "new") {
$consoleResults = Test-NewPlatformConsole -ServerIP $server.IP -Username $server.User -Password $server.Pass -Port $server.Port
} elseif ($platformType -eq "old") {
$consoleResults = Test-TraditionalPlatformConsole -ServerIP $server.IP -Username $server.User -Password $server.Pass -Port $server.Port -SystemInfo $systemInfo
}
Write-Log -Level "INFO" -Message "========== 结束检测console配置 =========="
# 检测 NTP 服务
Write-Log -Level "INFO" -Message "========== 开始检测NTP服务 =========="
$ntpResults = Test-NTPService -ServerIP $server.IP -Username $server.User -Password $server.Pass -Port $server.Port
......@@ -1430,6 +1442,7 @@ function Main {
-LogExportResults $logExportResults `
-NTPResults $ntpResults `
-FilePermResults $filePermResults `
-ConsoleResults $consoleResults `
-ContainerInfo $containerInfo `
-AndroidResults $androidResults `
-MiddlewareResults $middlewareResults
......
......@@ -1422,6 +1422,127 @@ test_config_ip() {
report_add "- finding_count: $count"
}
# ------------------------------
# 14) Console配置检测(新增:PRD console检测)
# - 检查配置文件中的console配置,如果为true则改为false
# - 修改前自动备份文件(.bak后缀)
# - 输出:
# console.status = OK/FIXED/WARN
# console.total_files = 检查的文件总数
# console.fixed_count = 修复的文件数
# console.error_count = 错误的文件数
# ------------------------------
test_config_console() {
local platform="$1"
local server_ip="$2"
section "Console配置检测"
log INFO "[CONSOLE] 开始扫描配置文件中的console配置"
report_kv_set "console.status" "OK"
report_kv_set "console.total_files" 0
report_kv_set "console.fixed_count" 0
report_kv_set "console.error_count" 0
local total_files=0
local fixed_files=()
local error_files=()
# console配置的正则表达式(匹配console后跟:或=,然后是true)
local console_re='console[[:space:]]*[:=][[:space:]]*true'
# 选择文件列表函数
local list_cmd=""
if [[ "$platform" == "new" ]]; then
list_cmd="_cfgip_list_files_new"
else
list_cmd="_cfgip_list_files_old"
fi
while IFS= read -r f; do
# 去掉潜在的CR
f="${f%$'\r'}"
[[ -z "$f" ]] && continue
# 防御:过滤掉带冒号的行
[[ "$f" == *":"* ]] && continue
# 防御:路径不应包含制表符等
[[ "$f" =~ [[:space:]] ]] && continue
[[ -f "$f" ]] || continue
# 文本过滤
if command_exists file; then
if ! file "$f" 2>/dev/null | grep -qiE 'text|json|xml|yaml|ascii|utf-8'; then
continue
fi
fi
((total_files++))
# 检查文件中是否存在console=true的配置
local has_console_true=0
if grep -qiE "$console_re" "$f" 2>/dev/null; then
has_console_true=1
fi
if [[ "$has_console_true" -eq 1 ]]; then
log INFO "[CONSOLE] 发现console=true: $f"
# 备份文件
local backup_file="${f}.bak"
if cp "$f" "$backup_file" 2>/dev/null; then
log INFO "[CONSOLE] 已备份: $backup_file"
# 修改配置:将console=true改为console=false
# 使用sed进行替换,忽略大小写
if sed -i 's/\(console[[:space:]]*[:=][[:space:]]*\)true/\1false/gI' "$f" 2>/dev/null; then
log SUCCESS "[CONSOLE] 已修复: $f"
fixed_files+=("$f")
else
log ERROR "[CONSOLE] 修改失败: $f"
error_files+=("$f")
fi
else
log ERROR "[CONSOLE] 备份失败: $f"
error_files+=("$f")
fi
fi
done < <($list_cmd)
report_kv_set "console.total_files" "$total_files"
report_kv_set "console.fixed_count" "${#fixed_files[@]}"
report_kv_set "console.error_count" "${#error_files[@]}"
if [[ "${#fixed_files[@]}" -gt 0 ]]; then
report_kv_set "console.status" "FIXED"
log INFO "[CONSOLE] 已修复以下文件:"
for file in "${fixed_files[@]}"; do
log INFO " - $file"
done
fi
if [[ "${#error_files[@]}" -gt 0 ]]; then
report_kv_set "console.status" "WARN"
log WARN "[CONSOLE] 以下文件处理失败:"
for file in "${error_files[@]}"; do
log WARN " - $file"
done
fi
if [[ "${#fixed_files[@]}" -eq 0 && "${#error_files[@]}" -eq 0 ]]; then
log SUCCESS "[CONSOLE] 所有配置文件console配置正常,无需修复"
fi
report_add ""
report_add "## Console配置检测"
report_add "- status: $(report_kv_get "console.status")"
report_add "- total_files: $total_files"
report_add "- fixed_count: ${#fixed_files[@]}"
report_add "- error_count: ${#error_files[@]}"
}
# ------------------------------
# 15) 定时任务查询(补齐:PRD 13)
# - 只检测、记录,不改动
......@@ -3258,10 +3379,13 @@ main() {
report_add "- DISK: 详见下方“检测详情 -> 资源分析/磁盘”"
report_add "- 防火墙: type=$(report_kv_get "fw.type") active=$(report_kv_get "fw.active") open=$(report_kv_get "fw.open")"
# 4) 配置文件 IP 检测(✅ 已实现:替换未实现”占位)
test_config_ip "$platform" "$server_ip"
# 4) 配置文件 IP 检测(✅ 已实现:替换未实现”占位)
test_config_ip $platform” “$server_ip
# (test_config_ip 内部已做 section + report_add 摘要,这里不再重复写)
# 4.1) Console配置检测(新增:检测并修复console=true配置)
test_config_console “$platform” “$server_ip
# 5) NTP
section "NTP 检测"
local ntp_status
......
......@@ -282,9 +282,334 @@ function Test-TraditionalPlatformIPs {
#endregion
#region Console Configuration Check
<#
.SYNOPSIS
检查新统一平台配置文件中的console配置
.DESCRIPTION
此函数扫描新统一平台配置目录下的配置文件,检查console相关配置是否为true,
如果为true则自动备份并修改为false。
.PARAMETER ServerIP
目标服务器的 IP 地址
.PARAMETER Username
SSH 登录用户名
.PARAMETER Password
SSH 登录密码
.PARAMETER Port
SSH 端口号,默认为 22
.EXAMPLE
Test-NewPlatformConsole -ServerIP "192.168.1.100" -Username "root" -Password "P@ssw0rd"
.OUTPUTS
System.Collections.Hashtable
返回包含检查结果的哈希表:Summary, ModifiedFiles, ErrorFiles, TotalFiles
#>
function Test-NewPlatformConsole {
param (
[string]$ServerIP,
[string]$Username,
[string]$Password,
[int]$Port = 22
)
Write-Log -Level "INFO" -Message "[CONFIG] ========== 开始检测console配置 =========="
$Directories = @(
"/data/services/api/auth/auth-sso-auth/config",
"/data/services/api/auth/auth-sso-gatway/config",
"/data/services/api/auth/auth-sso-system/config",
"/data/services/api/java-meeting/java-meeting2.0/config",
"/data/services/api/java-meeting/java-meeting3.0/config",
"/data/services/api/java-meeting/java-meeting-extapi/config",
"/data/services/api/java-meeting/java-message-scheduling/config",
"/data/services/api/java-meeting/java-mqtt/config",
"/data/services/api/java-meeting/java-quartz/config",
"/data/services/api/python-cmdb",
"/data/services/web/pc/pc-vue2-ai",
"/data/services/web/pc/pc-vue2-backstage",
"/data/services/web/pc/pc-vue2-editor",
"/data/services/web/pc/pc-vue2-main",
"/data/services/web/pc/pc-vue2-meetingControl",
"/data/services/web/pc/pc-vue2-meetngV2",
"/data/services/web/pc/pc-vue2-meetngV3",
"/data/services/web/pc/pc-vue2-moniter",
"/data/services/web/pc/pc-vue2-platform",
"/data/services/web/pc/pc-vue2-voice",
"/data/middleware/nginx/config"
)
$totalFiles = 0
$modifiedFiles = @()
$errorFiles = @()
foreach ($Directory in $Directories) {
# 查找配置文件
$findCmd = "find $Directory -type f \( -name '*.yml' -o -name '*.yaml' -o -name '*.properties' -o -name 'config.js' -o -name 'config.json' -o -name 'unified*.conf' \) 2>/dev/null"
$result = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $findCmd
if ($result.ExitCode -eq 0 -and $result.Output) {
$files = $result.Output -split "`n" | Where-Object { $_ -ne "" }
foreach ($file in $files) {
$file = $file.Trim()
if ([string]::IsNullOrEmpty($file)) { continue }
$totalFiles++
# 检查console配置(不区分大小写)
$grepCmd = "grep -iE 'console\s*[:=]\s*true' '$file' 2>/dev/null"
$grepResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $grepCmd
if ($grepResult.ExitCode -eq 0 -and $grepResult.Output) {
Write-Log -Level "INFO" -Message "[CONFIG] 发现console=true: $file"
# 备份文件
$backupCmd = "cp '$file' '$file.bak'"
$backupResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $backupCmd
if ($backupResult.ExitCode -eq 0) {
Write-Log -Level "INFO" -Message "[CONFIG] 已备份: ${file}.bak"
# 修改配置:将console=true改为console=false
$sedCmd = "sed -i 's/\(console\s*[:=]\s*\)true/\1false/gI' '$file'"
$sedResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $sedCmd
if ($sedResult.ExitCode -eq 0) {
Write-Log -Level "SUCCESS" -Message "[CONFIG] 已修复: $file"
$modifiedFiles += $file
} else {
Write-Log -Level "ERROR" -Message "[CONFIG] 修改失败: $file"
$errorFiles += $file
}
} else {
Write-Log -Level "ERROR" -Message "[CONFIG] 备份失败: $file"
$errorFiles += $file
}
}
}
}
}
Write-Log -Level "INFO" -Message "[CONFIG] ========== console配置检测完成 =========="
Write-Log -Level "INFO" -Message "[CONFIG] 检查文件数: $totalFiles"
Write-Log -Level "INFO" -Message "[CONFIG] 修复成功数: $($modifiedFiles.Count)"
Write-Log -Level "INFO" -Message "[CONFIG] 错误文件数: $($errorFiles.Count)"
if ($modifiedFiles.Count -gt 0) {
Write-Log -Level "INFO" -Message "[CONFIG] 已修复以下文件:"
foreach ($file in $modifiedFiles) {
Write-Log -Level "INFO" -Message "[CONFIG] - $file"
}
}
if ($errorFiles.Count -gt 0) {
Write-Log -Level "WARN" -Message "[CONFIG] 以下文件处理失败:"
foreach ($file in $errorFiles) {
Write-Log -Level "WARN" -Message "[CONFIG] - $file"
}
}
if ($modifiedFiles.Count -eq 0 -and $errorFiles.Count -eq 0) {
Write-Log -Level "SUCCESS" -Message "[CONFIG] 所有配置文件console配置正常,无需修复"
}
return @{
Summary = "检查 $($totalFiles) 个文件,修复 $($modifiedFiles.Count) 个,错误 $($errorFiles.Count) 个"
ModifiedFiles = $modifiedFiles
ErrorFiles = $errorFiles
TotalFiles = $totalFiles
Status = if ($errorFiles.Count -gt 0) { "WARN" } elseif ($modifiedFiles.Count -gt 0) { "FIXED" } else { "OK" }
}
}
<#
.SYNOPSIS
检查传统平台配置文件中的console配置
.DESCRIPTION
此函数扫描传统平台配置目录下的配置文件,检查console相关配置是否为true,
如果为true则自动备份并修改为false。
.PARAMETER ServerIP
目标服务器的 IP 地址(必需)
.PARAMETER Username
SSH 登录用户名(必需)
.PARAMETER Password
SSH 登录密码(必需)
.PARAMETER Port
SSH 端口号,默认为 22
.PARAMETER SystemInfo
包含系统信息的哈希表,用于明确平台类型(可选)
支持UjavaSystemVariant键,可选值为meeting或unified
.EXAMPLE
# 检查默认(meeting)平台
Test-TraditionalPlatformConsole -ServerIP "192.168.1.100" -Username "root" -Password "P@ssw0rd"
.EXAMPLE
# 检查统一平台配置
$sysInfo = @{ UjavaSystemVariant = "unified" }
Test-TraditionalPlatformConsole -ServerIP "10.0.0.50" -Username "admin" -Password "SecurePass" -SystemInfo $sysInfo
.OUTPUTS
System.Collections.Hashtable
返回包含检查结果的哈希表:Summary, ModifiedFiles, ErrorFiles, TotalFiles
#>
function Test-TraditionalPlatformConsole {
param (
[Parameter(Mandatory=$true)][string]$ServerIP,
[Parameter(Mandatory=$true)][string]$Username,
[Parameter(Mandatory=$true)][string]$Password,
[Parameter(Mandatory=$false)][int]$Port = 22,
[Parameter(Mandatory=$false)][hashtable]$SystemInfo
)
Write-Log -Level "INFO" -Message "[CONFIG] ========== 开始检测传统平台console配置 =========="
# 获取平台类型
$ujavaVariant = "meeting"
if ($SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant') -and $SystemInfo.UjavaSystemVariant) {
$ujavaVariant = [string]$SystemInfo.UjavaSystemVariant
}
# 根据平台类型设置路径
$webRoot = "/var/www/java"
if ($ujavaVariant -eq "unified") {
$webRoot = "/var/www/java/unifiedPlatform"
}
$Paths = @(
"/var/www/java/api-java-meeting2.0/config",
"/var/www/java/external-meeting-api/config",
"$webRoot/ubains-web-2.0/static/config.json",
"$webRoot/ubains-web-admin/static/config.json",
"/var/www/java/ubains-web-h5/static/h5/config.js",
"/var/www/java/ubains-web-h5/static/h5/config.json",
"$webRoot/nginx-conf.d"
)
$totalFiles = 0
$modifiedFiles = @()
$errorFiles = @()
foreach ($Path in $Paths) {
Write-Log -Level "INFO" -Message "[CONFIG] 检查路径: $Path"
# 检查是目录还是单个文件
$checkCmd = "test -d '$Path' && echo 'DIR' || (test -f '$Path' && echo 'FILE' || echo 'NOT_FOUND')"
$checkResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $checkCmd
if ($checkResult.ExitCode -ne 0) {
continue
}
$pathType = ($checkResult.Output -split "`n" | Where-Object { $_ -match '\S' } | Select-Object -Last 1).Trim()
if ($pathType -eq "NOT_FOUND") {
continue
}
$files = @()
if ($pathType -eq "DIR") {
# 查找目录下的配置文件
$findCmd = "find '$Path' -type f \( -name '*.yml' -o -name '*.yaml' -o -name '*.properties' -o -name '*.js' -o -name '*.json' -o -name '*.conf' \) 2>/dev/null"
$findResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $findCmd
if ($findResult.ExitCode -eq 0 -and $findResult.Output) {
$files = $findResult.Output -split "`n" | Where-Object { $_ -ne "" }
}
} else {
# 单个文件
$files = @($Path)
}
foreach ($file in $files) {
$file = $file.Trim()
if ([string]::IsNullOrEmpty($file)) { continue }
$totalFiles++
# 检查console配置(不区分大小写)
$grepCmd = "grep -iE 'console\s*[:=]\s*true' '$file' 2>/dev/null"
$grepResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $grepCmd
if ($grepResult.ExitCode -eq 0 -and $grepResult.Output) {
Write-Log -Level "INFO" -Message "[CONFIG] 发现console=true: $file"
# 备份文件
$backupCmd = "cp '$file' '$file.bak'"
$backupResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $backupCmd
if ($backupResult.ExitCode -eq 0) {
Write-Log -Level "INFO" -Message "[CONFIG] 已备份: ${file}.bak"
# 修改配置:将console=true改为console=false
$sedCmd = "sed -i 's/\(console\s*[:=]\s*\)true/\1false/gI' '$file'"
$sedResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Port $Port -Command $sedCmd
if ($sedResult.ExitCode -eq 0) {
Write-Log -Level "SUCCESS" -Message "[CONFIG] 已修复: $file"
$modifiedFiles += $file
} else {
Write-Log -Level "ERROR" -Message "[CONFIG] 修改失败: $file"
$errorFiles += $file
}
} else {
Write-Log -Level "ERROR" -Message "[CONFIG] 备份失败: $file"
$errorFiles += $file
}
}
}
}
Write-Log -Level "INFO" -Message "[CONFIG] ========== console配置检测完成 =========="
Write-Log -Level "INFO" -Message "[CONFIG] 检查文件数: $totalFiles"
Write-Log -Level "INFO" -Message "[CONFIG] 修复成功数: $($modifiedFiles.Count)"
Write-Log -Level "INFO" -Message "[CONFIG] 错误文件数: $($errorFiles.Count)"
if ($modifiedFiles.Count -gt 0) {
Write-Log -Level "INFO" -Message "[CONFIG] 已修复以下文件:"
foreach ($file in $modifiedFiles) {
Write-Log -Level "INFO" -Message "[CONFIG] - $file"
}
}
if ($errorFiles.Count -gt 0) {
Write-Log -Level "WARN" -Message "[CONFIG] 以下文件处理失败:"
foreach ($file in $errorFiles) {
Write-Log -Level "WARN" -Message "[CONFIG] - $file"
}
}
if ($modifiedFiles.Count -eq 0 -and $errorFiles.Count -eq 0) {
Write-Log -Level "SUCCESS" -Message "[CONFIG] 所有配置文件console配置正常,无需修复"
}
return @{
Summary = "检查 $($totalFiles) 个文件,修复 $($modifiedFiles.Count) 个,错误 $($errorFiles.Count) 个"
ModifiedFiles = $modifiedFiles
ErrorFiles = $errorFiles
TotalFiles = $totalFiles
Status = if ($errorFiles.Count -gt 0) { "WARN" } elseif ($modifiedFiles.Count -gt 0) { "FIXED" } else { "OK" }
}
}
#endregion
# ==============================================================================
# 导出模块函数
# ==============================================================================
Export-ModuleMember -Function @(
'Test-NewPlatformIPs','Test-TraditionalPlatformIPs'
'Test-NewPlatformIPs','Test-TraditionalPlatformIPs',
'Test-NewPlatformConsole','Test-TraditionalPlatformConsole'
)
......@@ -14,6 +14,7 @@ function Show-HealthReport {
[hashtable]$LogExportResults,
[hashtable]$NTPResults,
[hashtable]$FilePermResults,
[hashtable]$ConsoleResults,
[array]$ContainerInfo,
[array]$AndroidResults,
[array]$MiddlewareResults
......@@ -274,6 +275,32 @@ function Show-HealthReport {
} else { Write-Host " 未执行" -ForegroundColor Yellow; $md += "- 总结: ℹ️ 未执行" }
$md += ""
# Console配置检测
Write-Host "【Console配置检测】" -ForegroundColor Yellow
$md += "## Console配置检测"
if ($ConsoleResults) {
Write-Host " $($ConsoleResults.Summary)"
$consoleIcon = switch ($ConsoleResults.Status) {
"OK" { "✅" }
"FIXED" { "🔧" }
"WARN" { "⚠️" }
default { "ℹ️" }
}
$md += "- 总结: $consoleIcon $($ConsoleResults.Summary)"
$md += "- 检查文件数: $($ConsoleResults.TotalFiles)"
$md += "- 修复成功数: $($ConsoleResults.ModifiedFiles.Count)"
$md += "- 错误文件数: $($ConsoleResults.ErrorFiles.Count)"
if ($ConsoleResults.ModifiedFiles -and $ConsoleResults.ModifiedFiles.Count -gt 0) {
$md += "- 已修复文件:"
foreach ($f in $ConsoleResults.ModifiedFiles) { $md += " - $f" }
}
if ($ConsoleResults.ErrorFiles -and $ConsoleResults.ErrorFiles.Count -gt 0) {
$md += "- 错误文件:"
foreach ($f in $ConsoleResults.ErrorFiles) { $md += " - $f" }
}
} else { Write-Host " 未执行" -ForegroundColor Yellow; $md += "- 总结: ℹ️ 未执行" }
$md += ""
# 容器信息
$md += "## 容器信息"
if (-not $ContainerInfo -or $ContainerInfo.Count -eq 0) {
......
......@@ -62,6 +62,12 @@ TASK_SCRIPT[auto_clean]="/data/services/scripts/auto_clean_deleted_ubains_v3.sh"
TASK_LOG[auto_clean]=""
TASK_STATUS[auto_clean]=true # 默认启用
# health_check 任务定义(服务自检脚本,强制启用)
TASK_CRON[health_check]="0 0 * * *"
TASK_SCRIPT[health_check]="/data/services/scripts/check_health_shell/check_server_health.sh"
TASK_LOG[health_check]=""
TASK_STATUS[health_check]=true # 强制启用,不支持禁用
# 初始化 sudo 相关变量
if [[ $(id -u) -ne 0 ]]; then
SUDO="sudo"
......@@ -116,6 +122,9 @@ function show_help() {
--disable-auto-clean 禁用 auto_clean 定时任务
-h, --help 显示此帮助信息
注意:
health_check 任务默认强制启用,不支持禁用
默认行为:
不传参数时,所有定时任务默认启用
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论