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

feat(scripts): 优化定时任务脚本支持多架构并新增监控任务

- 为 X86 和 ARM 架构分别添加定时任务脚本配置
- 新增 nacos_monitor 任务用于 Nacos 服务监控(每3分钟执行)
- 新增 health_check 任务作为服务自检脚本(每天凌晨0点强制启用)
- 修正 mysql_backup 任务时间从周五凌晨0点调整为凌晨1点
- 添加 --enable-nacos-monitor 和 --disable-nacos-monitor 参数控制选项
- 实现 ARM 架构代码同步确保两架构功能完全一致
- 更新部署脚本支持 --all 参数自动部署所有系统
- 添加详细的部署分析报告和多维度测试验证
上级 2ead8f25
# 定时任务脚本优化需求
## 代码路径
- 需调用代码路径:[自动化部署脚本/x86架构/新统一平台/auto_crontab_settings.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
- X86架构:
- 需调用代码路径:[自动化部署脚本/x86架构/新统一平台/auto_crontab_settings.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
- ARM架构:
- 需调用代码路径:[自动化部署脚本/arm架构/新统一平台/arm_auto_crontab_settings.sh]
- 主脚本:[自动化部署脚本/arm架构/新统一平台/arm_new_auto.sh]
## 功能需求
### 功能目标
......
......@@ -4,9 +4,14 @@
## 1. 代码路径
### X86 架构
- **需调用代码路径**`自动化部署脚本/x86架构/新统一平台/auto_crontab_settings.sh`
- **主脚本**`自动化部署脚本/x86架构/新统一平台/new_auto.sh`
### ARM 架构
- **需调用代码路径**`自动化部署脚本/arm架构/新统一平台/arm_auto_crontab_settings.sh`
- **主脚本**`自动化部署脚本/arm架构/新统一平台/arm_new_auto.sh`
---
## 2. 重构目标
......@@ -38,12 +43,14 @@
| 任务 | Cron 表达式 | 脚本路径 | 日志 | 备注 |
|------|-------------|----------|------|------|
| check_health | `0 1 * * *` | `/data/services/scripts/check_server_health.sh` | 脚本自身管理 | 每天凌晨 01:00 执行,服务健康检查 |
| mysql_backup | `0 0 * * 5` | `/data/services/scripts/UbainsmysqlBakUp.sh` | 脚本自身管理 | 每周五凌晨 00:00 执行,MySQL数据库备份 |
| mysql_backup | `0 1 * * 5` | `/data/services/scripts/UbainsmysqlBakUp.sh` | 脚本自身管理 | 每周五凌晨 01:00 执行,MySQL数据库备份 |
| monitor_redis | `*/5 * * * *` | `/data/services/scripts/monitor_redis_service.sh` | 脚本自身管理 | 每5分钟执行,Redis服务监控 |
| monitor_emqx | `*/5 * * * *` | `/data/services/scripts/monitor_emqx_service.sh` | 脚本自身管理 | 每5分钟执行,EMQX服务监控 |
| nginx_backup | `0 3 * * *` | `/data/services/scripts/backup_nginx_logs.sh` | 脚本自身管理 | 每天凌晨 03:00 执行,Nginx日志备份 |
| mysql_logs_backup | `0 2 * * *` | `/data/services/scripts/backup_mysql_logs.sh` | 脚本自身管理 | 每天凌晨 02:00 执行,MySQL日志备份 |
| auto_clean | `0 4 * * *` | `/data/services/scripts/auto_clean_deleted_ubains_v3.sh` | 脚本自身管理 | 每天凌晨 04:00 执行,自动清理已删除ubains |
| nacos_monitor | `*/3 * * * *` | `/data/services/scripts/nacos-service.sh` | 脚本自身管理 | 每3分钟执行,Nacos服务监控 |
| health_check | `0 0 * * *` | `/data/services/scripts/check_health_shell/check_server_health.sh` | 脚本自身管理 | 每天凌晨 00:00 执行,服务自检脚本(强制启用) |
---
......@@ -148,6 +155,8 @@ _add_single_cron_job \
| `--disable-mysql-logs-backup` | 禁用 mysql_logs_backup 定时任务 |
| `--enable-auto-clean` | 启用 auto_clean 定时任务 |
| `--disable-auto-clean` | 禁用 auto_clean 定时任务 |
| `--enable-nacos-monitor` | 启用 nacos_monitor 定时任务 |
| `--disable-nacos-monitor` | 禁用 nacos_monitor 定时任务 |
| `-h, --help` | 显示帮助信息 |
#### 5.4.2 参数解析逻辑
......@@ -244,6 +253,16 @@ TASK_LOG[mysql_logs_backup]=""
TASK_CRON[auto_clean]="0 4 * * *"
TASK_SCRIPT[auto_clean]="/data/services/scripts/auto_clean_deleted_ubains_v3.sh"
TASK_LOG[auto_clean]=""
# 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]=""
# nacos_monitor 任务定义
TASK_CRON[nacos_monitor]="*/3 * * * *"
TASK_SCRIPT[nacos_monitor]="/data/services/scripts/nacos-service.sh"
TASK_LOG[nacos_monitor]=""
```
#### 5.4.4 调用示例
......@@ -262,6 +281,9 @@ TASK_LOG[auto_clean]=""
# 显式启用指定任务
./auto_crontab_settings.sh --enable-ujava2 --enable-check-health
# 禁用 nacos 监控任务
./auto_crontab_settings.sh --disable-nacos-monitor
# 参数冲突示例(会跳过 ujava2 任务)
./auto_crontab_settings.sh --enable-ujava2 --disable-ujava2
```
......@@ -280,6 +302,9 @@ add_crontab_job --enable-check-health --enable-mysql-backup
# 组合使用
add_crontab_job --disable-ujava2 --enable-check-health
# 禁用 nacos 监控任务
add_crontab_job --disable-nacos-monitor
```
---
......@@ -288,44 +313,50 @@ add_crontab_job --disable-ujava2 --enable-check-health
### 6.1 阶段一:重构通用函数
- [ ] 步骤 1:提取通用函数 `add_crontab_job()`
- [x] 步骤 1:提取通用函数 `add_crontab_job()`
- 参数化 cron 表达式、脚本路径、日志路径、注释
- 保留原有的检查逻辑(服务状态、脚本存在性、执行权限)
- [ ] 步骤 2:实现注释标记功能
- [x] 步骤 2:实现注释标记功能
- 在添加任务时插入注释行
- 格式:`# [AUTO_CRON] <task_name>`
- [ ] 步骤 3:优化日志输出
- [x] 步骤 3:优化日志输出
- 统一日志格式(前缀、时间戳)
- 区分 INFO/WARN/ERROR 级别
### 6.2 阶段二:实现自动清理机制
- [ ] 步骤 4:新增 `cleanup_crontab_jobs()` 函数
- [x] 步骤 4:新增 `cleanup_crontab_jobs()` 函数
- 解析当前 crontab
- 识别带 `[AUTO_CRON]` 标记的任务
- 检查对应脚本是否存在
- 移除无效任务条目
- [ ] 步骤 5:集成清理逻辑到主流程
- [x] 步骤 5:集成清理逻辑到主流程
- 在添加新任务前执行清理
- 记录清理结果日志
### 6.3 阶段三:配置新任务
- [ ] 步骤 6:配置 ujava2-startup 任务
- [x] 步骤 6:配置 ujava2-startup 任务
- 使用通用函数配置现有任务
- 添加注释标记
- [ ] 步骤 7:配置 check_server_health 任务
- 使用通用函数配置新任务
- 设置 cron 表达式为 `0 1 * * *`
- 无需日志重定向
- [x] 步骤 7:配置所有新任务
- check_server_health 任务(`0 1 * * *`
- mysql_backup 任务(`0 1 * * 5`
- monitor_redis 任务(`*/5 * * * *`
- monitor_emqx 任务(`*/5 * * * *`
- nginx_backup 任务(`0 3 * * *`
- mysql_logs_backup 任务(`0 2 * * *`
- auto_clean 任务(`0 4 * * *`
- nacos_monitor 任务(`*/3 * * * *`
- health_check 任务(`0 0 * * *`,强制启用)
### 6.4 阶段四:测试验证
- [ ] 步骤 8:功能测试
- [x] 步骤 8:功能测试
- 测试单个任务添加
- 测试多个任务配置
- 测试重复任务跳过
......@@ -333,10 +364,16 @@ add_crontab_job --disable-ujava2 --enable-check-health
- 测试执行权限自动修复
- 测试自动清理机制
- [ ] 步骤 9:日志验证
- [x] 步骤 9:日志验证
- 检查日志输出是否正确
- 验证错误信息是否清晰
### 6.5 架构同步
- [x] 步骤 10:ARM 架构代码同步
- 将 x86 版本的优化代码同步到 ARM 架构
- 确保 ARM 架构的 `arm_auto_crontab_settings.sh` 与 x86 版本功能一致
---
## 7. 关键代码片段设计
......@@ -564,14 +601,40 @@ EOF
| 4 | 清理函数逻辑优化 | ✅ 已实现 | 清理时使用临时文件而非直接修改,确保原子性操作 |
| 5 | 入口函数设计优化 | ✅ 已实现 | 将 `add_crontab_job` 改造为入口函数,支持参数传递,避免 main 函数命名冲突 |
| 6 | 内部函数分离 | ✅ 已实现 | 原添加任务逻辑移至 `_add_single_cron_job` 内部函数,职责更清晰 |
| 7 | 修正 mysql_backup 时间 | ✅ 已实现 | 从每周五凌晨 00:00 修正为每周五凌晨 01:00,符合需求文档 |
| 8 | 新增 health_check 任务 | ✅ 已实现 | 服务自检脚本,强制启用,不支持禁用 |
| 9 | 新增 nacos_monitor 任务 | ✅ 已实现 | Nacos 服务监控,支持参数控制启用/禁用 |
| 10 | ARM 架构代码同步 | ✅ 已完成 | 将 x86 架构的优化代码同步到 ARM 架构,确保功能一致 |
### ARM 架构同步记录
**同步日期:** 2026-05-18
**同步内容:**
- 将 x86 架构的 `auto_crontab_settings.sh` 完整同步到 ARM 架构的 `arm_auto_crontab_settings.sh`
- 确保 ARM 架构支持所有定时任务配置功能
- 确保 ARM 架构支持所有参数控制选项
**同步后功能对比:**
| 功能 | x86 架构 | ARM 架构 | 状态 |
|------|----------|----------|------|
| 基础任务配置 | ✅ | ✅ | 一致 |
| 参数化控制 | ✅ | ✅ | 一致 |
| 自动清理机制 | ✅ | ✅ | 一致 |
| 所有定时任务 | ✅ | ✅ | 一致 |
| 帮助信息 | ✅ | ✅ | 一致 |
---
**文档版本:** v1.4
**文档版本:** v2.0
**创建日期:** 2026-04-10
**最后更新:** 2026-04-10
**更新内容:**
**最后更新:** 2026-05-18
**更新内容:**
- v1.1:新增参数化控制设计(疑问11-14)
- v1.2:完成代码实现,新增优化功能回填记录
- v1.3:新增入口函数设计(疑问15-16),支持 `add_crontab_job` 函数式调用
- v1.4:新增多个定时任务(monitor_redis, monitor_emqx, nginx_backup, mysql_logs_backup, auto_clean),更新参数列表和测试用例
- v1.5:修正 mysql_backup 定时周期为每周五凌晨1点(`0 1 * * 5`
- v1.6:新增 nacos_monitor 任务和 health_check 任务,添加 ARM 架构支持
- v2.0:完成 ARM 架构代码同步,x86 和 ARM 架构功能完全一致
......@@ -27,7 +27,7 @@ TASK_LOG[check_health]=""
TASK_STATUS[check_health]=true # 默认启用
# mysql_backup 任务定义
TASK_CRON[mysql_backup]="0 0 * * 5"
TASK_CRON[mysql_backup]="0 1 * * 5"
TASK_SCRIPT[mysql_backup]="/data/services/scripts/UbainsmysqlBakUp.sh"
TASK_LOG[mysql_backup]=""
TASK_STATUS[mysql_backup]=true # 默认启用
......@@ -68,6 +68,12 @@ TASK_SCRIPT[health_check]="/data/services/scripts/check_health_shell/check_serve
TASK_LOG[health_check]=""
TASK_STATUS[health_check]=true # 强制启用,不支持禁用
# nacos_monitor 任务定义
TASK_CRON[nacos_monitor]="*/3 * * * *"
TASK_SCRIPT[nacos_monitor]="/data/services/scripts/nacos-service.sh"
TASK_LOG[nacos_monitor]=""
TASK_STATUS[nacos_monitor]=true # 默认启用
# 初始化 sudo 相关变量
if [[ $(id -u) -ne 0 ]]; then
SUDO="sudo"
......@@ -120,6 +126,8 @@ function show_help() {
--disable-mysql-logs-backup 禁用 mysql_logs_backup 定时任务
--enable-auto-clean 启用 auto_clean 定时任务
--disable-auto-clean 禁用 auto_clean 定时任务
--enable-nacos-monitor 启用 nacos_monitor 定时任务
--disable-nacos-monitor 禁用 nacos_monitor 定时任务
-h, --help 显示此帮助信息
注意:
......@@ -134,6 +142,7 @@ function show_help() {
$0 --enable-mysql-backup # 启用数据库备份
$0 --disable-monitor-redis --disable-monitor-emqx # 禁用监控任务
$0 --enable-ujava2 --enable-check-health --enable-mysql-backup # 显式启用所有任务
$0 --disable-nacos-monitor # 禁用 nacos 监控任务
示例(函数方式):
source $0 # 导入脚本
......@@ -141,6 +150,7 @@ function show_help() {
add_crontab_job --disable-ujava2 # 禁用 ujava2-startup
add_crontab_job --enable-mysql-backup # 启用数据库备份
add_crontab_job --disable-monitor-redis --disable-monitor-emqx # 禁用监控任务
add_crontab_job --enable-nacos-monitor # 启用 nacos 监控任务
EOF
}
......@@ -240,6 +250,17 @@ function parse_arguments() {
TASK_STATUS[auto_clean]=false
fi
;;
--enable-nacos-monitor)
TASK_STATUS[nacos_monitor]=true
;;
--disable-nacos-monitor)
if [[ "${TASK_STATUS[nacos_monitor]}" == "false" ]]; then
log "WARN" "⚠️ 参数冲突:nacos_monitor 同时被启用和禁用,跳过该任务"
TASK_STATUS[nacos_monitor]=conflict
else
TASK_STATUS[nacos_monitor]=false
fi
;;
-h|--help)
show_help
exit 0
......
......@@ -45,6 +45,32 @@ function log() {
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
}
# 自动部署所有服务的标志(默认false,需要通过--all参数启用)
AUTO_DEPLOY_ALL=false
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
--all)
AUTO_DEPLOY_ALL=true
log "INFO" "启用自动部署所有系统模式"
shift
;;
--help|-h)
echo "用法: $0 [选项]"
echo "选项:"
echo " --all 自动部署所有系统(无需手动选择)"
echo " --help 显示此帮助信息"
exit 0
;;
*)
echo "未知参数: $1"
echo "使用 --help 查看帮助信息"
exit 1
;;
esac
done
#------------------------------导入中间件部署模块---------------------------------------------------
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
......@@ -1328,7 +1354,16 @@ function getLatestVersion() {
# 1. 默认显示全部服务:deploy_services ""
# 2. 指定服务:deploy_services "meeting,monitor,voice"
# 3. 通过变量:deploy_services "$deploy_services_type"
deploy_services ""
# 4. 自动部署所有系统:./arm_new_auto.sh --all
# 判断是否启用自动部署所有系统
if [ "$AUTO_DEPLOY_ALL" = true ]; then
log "INFO" "自动部署所有系统,跳过服务选择界面"
deploy_services "all"
else
log "INFO" "进入服务选择界面"
deploy_services ""
fi
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论