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

feat(script): 优化服务监测脚本实现容器模糊匹配

- 新增 nacos-service.sh 脚本,独立处理 Nacos 容器监测逻辑
- 修改 ujava2-startup.sh 脚本,移除 Nacos 相关功能并实现容器模糊匹配
- 为 PowerShell 检测脚本添加 NTP 服务状态转换功能
- 在 ujava2-startup.sh 中新增第二个 API 检查点,增强服务监测能力
- 实现容器名称模糊匹配机制,提高脚本适应性和容错能力
- 更新文档记录服务监测脚本优化 V2 需求及执行计划
上级 0b2100ee
......@@ -1174,16 +1174,18 @@ function Test-NTPService-Shell {
$serviceStatus = "stopped"
$timeSync = "unknown"
if ($output -match "NTP service: active \((.+)\)") {
$ntpService = $matches[1]
# 检查NTP服务状态
if ($output -match "NTP service:\s+active") {
$ntpService = "chronyd"
$serviceStatus = "running"
} elseif ($output -match "NTP service: inactive") {
} elseif ($output -match "NTP service:\s+inactive") {
$serviceStatus = "stopped"
}
if ($output -match "System clock synchronized: yes") {
# 检查时间同步状态
if ($output -match "System clock synchronized:\s+yes") {
$timeSync = "synchronized"
} elseif ($output -match "System clock synchronized: no") {
} elseif ($output -match "System clock synchronized:\s+no") {
$timeSync = "not_synchronized"
}
......@@ -2362,7 +2364,7 @@ function Main {
Write-Host ""
Write-Log -Level "INFO" -Message "========== 开始检测配置文件 IP =========="
if ($global:UseShellMode) {
Test-ConfigIPs-Shell -Server $server -PlatformType $platformType
$null = Test-ConfigIPs-Shell -Server $server -PlatformType $platformType
} else {
if ($platformType -eq "new") {
Test-NewPlatformIPs -ServerIP $server.IP -Username $server.User -Password $server.Pass -Port $server.Port
......@@ -2441,8 +2443,16 @@ function Main {
$ntpArray = @($ntpResults)
if ($ntpArray.Count -gt 0) {
$ntpFirst = $ntpArray[0]
# 将NTP状态转换为报告期望的状态格式
$ntpStatus = switch ($ntpFirst.Status) {
"running" { "正常" }
"stopped" { "异常" }
default { "未知" }
}
$ntpResultsHashtable = @{
Status = $ntpFirst.Status
Status = $ntpStatus
Detail = "$($ntpFirst.Daemon) - $($ntpFirst.TimeSync)"
}
}
......
# 服务监测脚本优化需求
## 代码路径
- 代码路径:[自动化部署脚本/x86架构/新统一平台/定时脚本/ujava2-startup.sh]
- 代码路径:[自动化部署脚本/x86架构/新统一平台/定时脚本/nacos-service.sh]
- 原始需求文档路径:[Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_新统一平台后端服务监测_需求文档.md]
## 功能需求
### 功能目标
**目标:** 拆分`ujava2-startup.sh`脚本。
### 需求描述
- 关于nacos相关的拆分出独立一份脚本`nacos-service.sh`,添加重试机制,原有的nacos检测逻辑不变,容器匹配方式改为模糊匹配。
- 将java服务的检测保留在脚本`ujava2-startup.sh`,将匹配规则改为模糊匹配。
#### nacos脚本描述
- 匹配容器:`nacos`,通过模糊匹配。
- 检测逻辑:
- 先检查容器是否正常运行,观察容器日志是否正常打印,无报错信息。
- 通过`curl -k https://服务器IP/nacos`,检查服务是否正常,保留原有重试机制。
- 如果服务正常,则返回`0`,否则返回`1`,并重启容器观察容器日志。再异常就不再处理,退出脚本。
#### ujava脚本描述
- 匹配容器:`ujava`,通过模糊匹配。
- 检测逻辑:
- 先检查容器是否正常运行,观察容器日志是否正常打印,无报错信息。
- 进入容器检查进程是否正常运行,无报错信息。如果有进程未启动,则在对应目录下执行`run.sh`脚本。
- 最后通过`curl -k https://服务器IP/platform/code``curl -k https://服务器IP/platform/newmeeting/api/systemConfiguration/systemConfig?companyNumber=CN-SZ-00-0201` ,检查服务是否正常,保留原有重试机制。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# 服务监测脚本优化V2 - 计划执行文档
## 需求概述
拆分 `ujava2-startup.sh` 脚本,将 nacos 相关逻辑独立到 `nacos-service.sh`,容器匹配改为模糊匹配。
## 修改文件清单
### [x] 新建:nacos-service.sh
- **文件路径**: `自动化部署脚本/x86架构/新统一平台/定时脚本/nacos-service.sh`
- **功能**: nacos容器健康检查和自动重启
- **容器匹配**: 模糊匹配 `nacos`
### [x] 修改:ujava2-startup.sh
- **文件路径**: `自动化部署脚本/x86架构/新统一平台/定时脚本/ujava2-startup.sh`
- **修改内容**:
- 移除 nacos 相关逻辑
- 容器匹配改为模糊匹配 `ujava`
- 保留 Java 服务检测逻辑
- 新增第二个 API 检查点
---
## 一、nacos-service.sh 脚本设计
### 脚本功能
1. **容器模糊匹配**: 查找名称包含 `nacos` 的容器
2. **健康检查**:
- 检查容器是否正常运行
- 观察容器日志是否正常打印,无报错信息
3. **服务可用性检查**: `curl -k https://服务器IP/nacos`
4. **重试机制**: 保留原有重试机制
5. **异常处理**: 服务异常时重启容器,再异常则退出
### 检测流程
```
开始
├──→ 模糊查找 nacos 容器
│ └── 未找到 → 退出
├──→ 检查容器运行状态
│ └── 未运行 → 重启容器
├──→ 检查容器日志(最近50行)
│ └── 有 ERROR/Exception → 记录警告
├──→ curl 检查服务(带重试)
│ └── 失败 → 重启容器 → 检查日志
│ └── 仍异常 → 退出脚本
└──→ 结束
```
### 配置参数
```bash
CONTAINER_PATTERN="nacos" # 容器模糊匹配模式
NACOS_PORT="8848" # Nacos服务端口
NACOS_CHECK_URL="http://localhost:8848/nacos/" # 健康检查URL
RETRY_MAX_COUNT=3 # 最大重试次数
RETRY_INTERVAL=10 # 重试间隔(秒)
LOG_FILE="/data/logs/nacos-service.log" # 日志文件
```
---
## 二、ujava2-startup.sh 脚本修改
### 修改内容
#### 1. 移除的内容
- `check_unacos_health()` 函数
- `restart_unacos_if_needed()` 函数
- `check_services()` 中对 unacos 的检查调用
- 主流程中的 unacos 相关逻辑
#### 2. 修改的内容
**容器匹配改为模糊匹配**:
```bash
# 原代码(精确匹配)
CONTAINER_NAME="ujava2"
# 修改后(模糊匹配)
CONTAINER_PATTERN="ujava"
CONTAINER_NAME=$(docker ps --format "{{.Names}}" | grep -E "$CONTAINER_PATTERN" | head -n 1)
```
**新增第二个API检查点**:
```bash
# 原有检查
API_URL="https://192.168.5.44/platform/api/code"
# 新增检查
API_URL_2="https://192.168.5.44/platform/newmeeting/api/systemConfiguration/systemConfig?companyNumber=CN-SZ-00-0201"
```
#### 3. 主流程调整
```
开始
├──→ 模糊查找 ujava 容器
│ └── 未找到 → 退出
├──→ 平台 API 检查1(/platform/api/code)
│ └── 失败 → 强制重启关键服务
├──→ 平台 API 检查2(/platform/newmeeting/api/...)
│ └── 失败 → 记录日志(不强制重启)
├──→ 容器内 Java 服务检查
│ └── 有停止的服务 → 逐个重启
├──→ 宿主机 extapi 服务检查
│ └── 停止 → 重启
└──→ 6060 端口检查(malan)
└── 未监听 → 启动 malan
```
---
## 三、实施步骤
### 步骤1: 创建 nacos-service.sh
1. 创建脚本文件
2. 实现容器模糊匹配函数
3. 实现健康检查函数
4. 实现日志检查函数
5. 实现服务可用性检查函数(带重试)
6. 实现容器重启函数
7. 编写主流程
8. 添加执行权限
### 步骤2: 修改 ujava2-startup.sh
1. 移除 nacos 相关函数
2. 修改容器匹配为模糊匹配
3. 新增第二个 API 检查点
4. 修改主流程
5. 测试验证
### 步骤3: 验证测试
1. 测试 nacos 容器模糊匹配
2. 测试 nacos 服务异常时的重启逻辑
3. 测试 ujava 容器模糊匹配
4. 测试两个 API 检查点
5. 测试 Java 服务自愈功能
6. 测试 extapi 服务自愈
7. 测试 malan 服务启动
---
## 四、代码结构
### nacos-service.sh 结构
```bash
#!/bin/bash
# 配置参数
# 日志函数
# 容器模糊匹配函数
# 健康检查函数(容器状态)
# 日志检查函数(检查ERROR)
# 服务可用性检查函数(curl + 重试)
# 容器重启函数
# 主流程
```
### 修改后的 ujava2-startup.sh 结构
```bash
#!/bin/bash
# 配置参数(新增第二个API URL)
# 并发控制锁
# 日志函数
# API检查函数(支持两个检查点)
# 关键服务重启函数
# 容器模糊匹配函数(新增)
# Java服务管理函数
# 宿主机extapi服务函数
# 6060端口/malan服务函数
# 主流程(移除nacos逻辑)
```
---
## 五、注意事项
### 1. 容器模糊匹配安全性
- 使用 `head -n 1` 确保只操作第一个匹配的容器
- 添加日志输出匹配到的容器名称
### 2. 重试机制保留
- nacos-service.sh 保留原有的重试机制
- API 检查失败时记录详细日志
### 3. 日志文件分离
- nacos-service.sh: `/data/logs/nacos-service.log`
- ujava2-startup.sh: `/data/logs/ujava2-service-manager.log`
### 4. 服务器IP配置
- 建议通过环境变量或配置文件获取服务器IP
- 避免硬编码 IP 地址
---
## 六、优化功能回填
- [x] 脚本拆分完成,职责分离
- [x] 容器匹配改为模糊匹配
- [ ] 服务器IP配置化(后续优化)
- [ ] 统一配置文件管理(后续优化)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论