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

refactor(deploy): 重构自动化部署脚本架构,新增传参README文档记录。

- 将MySQL部署函数从注释状态激活并优化实现
- 移除冗余的数据导入日志输出,简化nacos配置IP更新流程
- 统一各部署脚本中的日志文件路径,从/data/log改为/data/logs
- 调整部署流程顺序,优化server_ip获取的代码格式
- 更新meeting、monitor、voice等子系统的服务部署逻辑
- 新增crontab定时任务配置脚本的详细使用说明文档
- 新增服务部署脚本的交互式选择功能说明文档
- 新增中间件部署脚本的模块化架构说明文档
- 实现参数化的服务选择部署机制,支持meeting、monitor、voice等服务组合
- 增加部署后的延迟等待时间,确保服务稳定启动
- 优化定时任务的自动清理和脚本存在性检查机制
上级 1255e032
# 定时任务配置脚本使用说明
## 概述
`auto_crontab_settings.sh` 是一个支持多任务配置、参数化控制和自动清理的定时任务配置脚本。
## 调用方式
### 方式一:直接调用脚本
```bash
./auto_crontab_settings.sh [参数]
```
### 方式二:在主脚本中调用函数
```bash
source "$SCRIPT_DIR/auto_crontab_settings.sh"
add_crontab_job [参数]
```
## 支持的参数
| 参数 | 说明 |
|------|------|
| `--enable-ujava2` | 启用 ujava2-startup 定时任务 |
| `--disable-ujava2` | 禁用 ujava2-startup 定时任务 |
| `--enable-check-health` | 启用 check_server_health 定时任务 |
| `--disable-check-health` | 禁用 check_server_health 定时任务 |
| `--enable-mysql-backup` / `--enable-mysql` | 启用 mysql_backup 定时任务 |
| `--disable-mysql-backup` / `--disable-mysql` | 禁用 mysql_backup 定时任务 |
| `--enable-monitor-redis` | 启用 monitor_redis 定时任务 |
| `--disable-monitor-redis` | 禁用 monitor_redis 定时任务 |
| `--enable-monitor-emqx` | 启用 monitor_emqx 定时任务 |
| `--disable-monitor-emqx` | 禁用 monitor_emqx 定时任务 |
| `--enable-nginx-backup` | 启用 nginx_backup 定时任务 |
| `--disable-nginx-backup` | 禁用 nginx_backup 定时任务 |
| `--enable-mysql-logs-backup` | 启用 mysql_logs_backup 定时任务 |
| `--disable-mysql-logs-backup` | 禁用 mysql_logs_backup 定时任务 |
| `--enable-auto-clean` | 启用 auto_clean 定时任务 |
| `--disable-auto-clean` | 禁用 auto_clean 定时任务 |
| `-h, --help` | 显示帮助信息 |
## 定时任务列表
| 任务名称 | Cron 表达式 | 脚本路径 | 说明 |
|----------|-------------|----------|------|
| ujava2 | `*/3 * * * *` | `/data/services/scripts/ujava2-startup.sh` | 每3分钟执行,ujava2服务启动检查 |
| 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数据库备份 |
| 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 |
| health_check | `0 0 * * *` | `/data/services/scripts/check_health_shell/check_server_health.sh` | 每天凌晨00:00执行,服务自检(强制启用) |
## 使用示例
### 默认全部启用
```bash
# 脚本方式
./auto_crontab_settings.sh
# 函数方式
source auto_crontab_settings.sh
add_crontab_job
```
### 禁用特定任务
```bash
# 禁用 ujava2-startup
./auto_crontab_settings.sh --disable-ujava2
# 禁用监控任务
./auto_crontab_settings.sh --disable-monitor-redis --disable-monitor-emqx
```
### 只启用特定任务
```bash
# 只启用数据库备份任务
./auto_crontab_settings.sh --enable-mysql-backup --enable-nginx-backup --enable-mysql-logs-backup
```
## 注意事项
1. **默认行为**:不传参数时,所有定时任务默认启用(向后兼容)
2. **参数冲突**:如果同时传入 `--enable-xxx``--disable-xxx`,脚本会跳过该任务并打印警告
3. **health_check 任务**:该任务默认强制启用,不支持禁用
4. **脚本存在性检查**:如果定时任务脚本不存在,会自动跳过配置并记录日志
5. **执行权限自动修复**:脚本会自动为无执行权限的脚本添加 `chmod +x`
6. **自动清理机制**:脚本不存在时,会自动移除对应的 crontab 条目
7. **Cron 服务自动启动**:如果 cron/crond 服务未运行,脚本会自动启动并设置开机自启
## 相关文档
- 需求文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_定时任务脚本优化_需求文档.md`
- 计划执行文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_定时任务脚本优化_需求文档_计划执行.md`
# 服务部署脚本使用说明
## 概述
`auto_deploy_services.sh` 是一个支持交互式选择和参数化过滤的服务部署脚本,支持预定系统、运维集控系统、语音转录系统、无纸化信令服务和电子桌牌服务的部署。
## 调用方式
### 方式一:在主脚本中调用函数
```bash
source "$SCRIPT_DIR/auto_deploy_services.sh"
# 默认显示全部服务选项
deploy_services ""
# 指定显示的服务(逗号分隔)
deploy_services "meeting,monitor,voice"
deploy_services "$deploy_services_type"
```
## 传参说明
### 参数格式
```
deploy_services "service1,service2,service3"
```
- 参数为空字符串 `""` 或不传参:显示全部服务选项
- 参数为服务名称列表(逗号分隔):只显示指定的服务选项
### 服务名称映射
| 服务名称 | 对应函数 | 菜单编号 | 说明 |
|---------|---------|---------|------|
| meeting | java_x86 | 1 | 预定系统(Java 后端服务) |
| monitor | python_x86 | 2 | 运维集控系统(Python 运维控制平台) |
| voice | python_voice_x86, iListen_x86 | 3 | 语音转录系统(语音识别引擎 + 转录后端) |
| paperless | paperless_x86 | 4 | 无纸化信令服务(Paperless 信令转发) |
| cardtable | cardtable_x86 | 5 | 电子桌牌服务(电子桌牌通信服务) |
## 使用示例
### 场景1:显示全部服务
```bash
deploy_services ""
# 或不传参(需脚本支持默认空参数)
```
### 场景2:只部署预定系统
```bash
deploy_services "meeting"
```
### 场景3:只部署预定系统和运维系统
```bash
deploy_services "meeting,monitor"
```
### 场景4:部署语音系统(包含两个服务)
```bash
deploy_services "voice"
# 会同时部署 python_voice_x86 和 iListen_x86
```
### 场景5:部署多个服务
```bash
deploy_services "meeting,monitor,voice"
```
### 场景6:只部署备份相关服务
```bash
deploy_services "paperless,cardtable"
```
## 部署流程
1. **服务过滤**:根据传入的参数过滤显示的服务选项
2. **交互选择**:用户在弹窗中勾选需要部署的服务
3. **确认部署**:显示选择的服务列表,用户确认后开始部署
4. **自动部署**:依次调用对应的服务部署函数
5. **结果统计**:显示部署成功和失败的服务数量
## 支持的服务部署函数
| 函数名 | 容器名 | 镜像 | 端口 | 说明 |
|--------|--------|------|------|------|
| java_x86 | ujava2 | 139.9.60.86:5000/ujava:v6 | 8085, 8993-8995, 9903-9920, 30880-30884 | 预定系统 Java 后端 |
| python_x86 | upython | 139.9.60.86:5000/upython:v16 | 8000, 8002 | 运维集控系统 |
| python_voice_x86 | upython_voice | 139.9.60.86:5000/upython:v13 | 8003-8004, 8080 | 语音转录后端 |
| iListen_x86 | (非容器) | - | - | 科大讯飞语音识别引擎 |
| paperless_x86 | paperless | paperless:v1 | 62121-62122 | 无纸化信令服务 |
| cardtable_x86 | cardtable | uos-cardtable:v1 | host 网络 | 电子桌牌服务 |
## 注意事项
1. **参数分隔符**:服务名称之间使用英文逗号 `,` 分隔
2. **未知服务名称**:传入无效服务名称时会输出警告并忽略,不影响其他有效服务
3. **全部无效服务名**:如果所有服务名都无效,将显示全部服务选项
4. **容器存在检查**:脚本会检查容器是否已存在,存在则跳过部署并退出
5. **镜像加载**:镜像不存在时会自动从 `/data/offline_auto_unifiedPlatform/data/temp/` 加载
6. **目录挂载**:部署前会检查目标目录是否存在,不存在则报错
## 常见问题
### Q: 如何只部署语音系统?
A: `voice` 服务会同时部署 `python_voice_x86``iListen_x86` 两个组件
### Q: 容器已存在怎么办?
A: 脚本会自动检测并跳过部署,需要先手动删除容器:`docker rm -f <容器名>`
### Q: 如何查看部署日志?
A: 部署过程会在终端输出详细日志,失败时提示执行 `docker logs <容器名>` 查看容器日志
## 相关文档
- 需求文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_deploy服务部署脚本优化_需求文档.md`
- 计划执行文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_deploy服务部署脚本优化_需求文档_计划执行.md`
# 中间件部署脚本使用说明
## 概述
`auto_middleware_install.sh` 是中间件服务部署脚本,支持 Docker、Redis、MySQL、EMQX、FastDFS、ngrok、Nacos、Nginx 等中间件的自动化部署。
## 调用方式
### 方式一:在主脚本中调用函数
```bash
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 导入脚本
source "$SCRIPT_DIR/auto_middleware_install.sh"
# 设置服务器IP(可选)
server_ip="192.168.1.100"
# 单个中间件部署
middleware_type=redis install_middleware
# 多个中间件部署(空格分隔)
middleware_type="redis mysql emqx" install_middleware
# 所有中间件部署
middleware_type="mysql redis emqx fdfs ngrok nacos nginx" install_middleware
```
### 方式二:直接调用脚本
```bash
# 设置环境变量后调用
middleware_type="redis mysql" bash auto_middleware_install.sh
```
## 传参说明
### 参数格式
通过环境变量 `middleware_type` 传递中间件类型,多个中间件用空格分隔:
```bash
middleware_type="middleware1 middleware2 middleware3"
```
### 支持的中间件
| 中间件 | 参数值 | 部署函数 | 说明 |
|--------|--------|----------|------|
| **Docker** | 优先部署(无条件) | docker_x86 | 容器运行环境,必须优先部署 |
| Redis | redis | redis_x86 | 缓存数据库 |
| MySQL | mysql | mysql_x86 | 关系型数据库 |
| EMQX | emqx | emqx_x86 | MQTT 消息队列 |
| FastDFS | fdfs | fastfds_x86 | 分布式文件存储 |
| ngrok | ngrok | ngrok_x86 | 内网穿透服务 |
| Nacos | nacos | nacos_x86 | 配置中心和服务发现 |
| Nginx | nginx | nginx_x86 | 反向代理和负载均衡 |
## 部署顺序
脚本会按照以下优先级顺序部署中间件(建议顺序):
1. **Docker** (无条件优先部署)
2. **MySQL** (数据库优先)
3. **Redis** (缓存)
4. **EMQX** (消息队列)
5. **Nacos** (配置中心)
6. **FastDFS** (文件存储)
7. **ngrok** (内网穿透)
8. **Nginx** (反向代理)
**注意**:Docker 部署失败会导致整个部署流程停止。
## 使用示例
### 场景1:只部署 Redis
```bash
middleware_type=redis install_middleware
```
### 场景2:部署基础中间件(MySQL + Redis)
```bash
middleware_type="mysql redis" install_middleware
```
### 场景3:部署消息队列相关(Redis + EMQX)
```bash
middleware_type="redis emqx" install_middleware
```
### 场景4:部署所有中间件
```bash
middleware_type="mysql redis emqx fdfs ngrok nacos nginx" install_middleware
```
### 场景5:部署无纸化会议所需中间件
```bash
middleware_type="mysql redis emqx nginx" install_middleware
```
## 返回值说明
| 返回值 | 含义 | 处理方式 |
|--------|------|----------|
| 0 | 部署成功 | 继续后续流程 |
| 1 | 部署失败 | 使用 `log "ERROR"` 打印错误日志,主脚本应停止执行 |
## Docker 版本要求
| 配置项 | 值 |
|--------|-----|
| 离线包路径 | `/data/temp/docker-29.1.3.tgz` |
| 版本号 | `29.1.3` |
| 服务配置文件 | `/data/temp/docker.service` |
## 部署函数说明
### docker_x86()
- 检查 Docker 是否已安装
- 从离线包安装 Docker 29.1.3
- 配置 systemd 服务并启动
- 设置开机自启
### mysql_x86()
- 容器名:umysql
- 镜像:139.9.60.86:5000/umysql:v5.2
- 端口:8306
- 数据目录:/data/middleware/mysql
- 支持定时备份(每天 13:00)
### redis_x86()
- 容器名:uredis
- 镜像:139.9.60.86:5000/uredis:v1
- 端口:6379
- 数据目录:/data/middleware/redis
### emqx_x86()
- 容器名:uemqx
- 镜像:139.9.60.86:5000/uemqx:v1
- 端口:18083, 1883, 8883, 8083, 8084
- 数据目录:/data/middleware/emqx
### fastfds_x86()
- 容器名:ufastdfs
- 镜像:139.9.60.86:5000/ufastdfs:v1
- 端口:8888, 22122
- 数据目录:/data/middleware/fastdfs
### ngrok_x86()
- 容器名:ungrok
- 镜像:139.9.60.86:5000/ungrok:v1
- 端口:8081
### nacos_x86()
- 容器名:unacos
- 镜像:139.9.60.86:5000/unacos:v2
- 端口:8848, 9848, 9849
- 数据目录:/data/middleware/nacos
### nginx_x86()
- 容器名:unginx
- 镜像:139.9.60.86:5000/unified_nginx:v1
- 端口:80, 443
- 配置目录:/data/middleware/nginx
## 注意事项
1. **Docker 优先部署**:Docker 是所有中间件的基础,必须首先部署成功
2. **Docker 部署失败停止流程**:如果 Docker 部署失败,整个中间件部署流程会立即停止
3. **容器存在检查**:每个中间件部署前会检查容器是否已存在,存在则跳过部署
4. **离线包要求**:确保所有离线镜像包已上传到 `/data/temp/` 目录
5. **数据目录**:部署前确保宿主机数据目录存在(如 `/data/middleware/mysql/`
6. **参数分隔符**:多个中间件之间使用空格分隔,不是逗号
## 常见问题
### Q: Docker 部署失败怎么办?
A: 检查 `/data/temp/docker-29.1.3.tgz``/data/temp/docker.service` 文件是否存在
### Q: 如何跳过 Docker 部署?
A: 无法跳过,Docker 是所有中间件的基础,必须优先部署
### Q: 中间件部署顺序可以调整吗?
A: 脚本会按照建议顺序(MySQL → Redis → EMQX → Nacos → FastDFS → ngrok → Nginx)自动排序部署
### Q: 容器已存在会怎么处理?
A: 脚本会检测到容器已存在,跳过部署并继续下一个中间件
## 相关文档
- 需求文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_主脚本模块化拆分中间件_需求文档.md`
- 计划执行文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_主脚本模块化拆分中间件_需求文档_计划执行.md`
......@@ -137,268 +137,6 @@ function docker_x86() {
# - $PWD/UbainsmysqlBakUp.sh
# 并确保宿主机 /data/middleware/mysql/ 目录存在
#==============================================================#
#function mysql_x86() {
# # --- 配置参数 ---
# local container_name="umysql"
# local image_tar="/data/temp/umysql.tar.gz"
# local image_name="139.9.60.86:5000/umysql:v5.2"
# local image_id="4c5574ba4b04"
# local mysql_root_password="dNrprU&2S"
# local mysql_port="8306"
# local host_data_dir="/data/middleware/mysql"
# local backup_script_src="$PWD/UbainsmysqlBakUp.sh"
# local backup_script_dst="/usr/local/docker/UbainsmysqlBakUp.sh"
# local cron_user="root"
#
# log "INFO" "=================================================================="
# log "INFO" "开始部署 MySQL 服务 (Docker 版, x86)"
# log "INFO" "=================================================================="
#
# # 自动判断是否需要 sudo
# local SUDO=""
# if [[ $(id -u) -ne 0 ]]; then
# if command -v sudo >/dev/null; then
# SUDO="sudo"
# else
# log "ERROR" "⛔ 当前不是 root 用户,且系统未安装 sudo,无法执行操作"
# return 1
# fi
# fi
#
# # ------------------- 检查容器是否已运行 -------------------
# log "INFO" "🔍 检查容器 '$container_name' 是否已运行..."
# if $SUDO docker ps --format '{{.Names}}' | grep -qw "$container_name"; then
# log "INFO" "✅ 容器 '$container_name' 已在运行"
# return 0
# fi
#
# # ------------------- 检查镜像是否存在 -------------------
# log "INFO" "🔍 检查镜像 $image_name 是否存在..."
# if $SUDO docker images --format '{{.Repository}}:{{.Tag}}' | grep -qw "$image_name"; then
# log "INFO" "✅ 镜像 $image_name 已存在"
# else
# log "WARN" "❌ 镜像 $image_name 不存在,开始加载离线包..."
#
# if [[ ! -f "$image_tar" ]]; then
# log "ERROR" "⛔ 镜像文件不存在: $image_tar"
# return 1
# fi
#
# if $SUDO docker load -i "$image_tar"; then
# log "INFO" "🎉 镜像加载成功"
# else
# log "ERROR" "⛔ 镜像加载失败,请检查文件完整性"
# return 1
# fi
#
# fi
#
# # ------------------- 启动容器 -------------------
# log "INFO" "🚀 正在启动 MySQL 容器: $container_name"
# $SUDO docker run -d \
# --name "$container_name" \
# --mac-address="02:42:ac:11:00:05" \
# -p "${mysql_port}:3306" \
# -v "${host_data_dir}/conf/my.cnf:/etc/mysql/my.cnf" \
# -v "${host_data_dir}/conf.d:/etc/mysql/conf.d" \
# -v "${host_data_dir}/log:/var/log/mysql" \
# -v "${host_data_dir}/data:/var/lib/mysql" \
# -v "/etc/localtime:/etc/localtime:ro" \
# --restart=always \
# -e "MYSQL_ROOT_PASSWORD=$mysql_root_password" \
# "$image_name"
#
# if [[ $? -ne 0 ]]; then
# log "ERROR" "⛔ 容器启动失败,请检查端口占用或磁盘权限"
# log "INFO" "📄 查看最近容器日志以排查问题..."
# $SUDO docker logs "$container_name" 2>/dev/null || true
# return 1
# fi
#
# # ------------------- 2. 【核心修改】主动探测 MySQL 服务状态 -------------------
# log "INFO" "⏳ 正在等待 MySQL 服务就绪 (主动探测中)..."
#
# # 定义一个内部函数用于等待
# wait_for_mysql() {
# local max_retries=60 # 最大尝试次数 (60 * 2秒 = 120秒)
# local count=0
#
# # 循环检测
# while [ $count -lt $max_retries ]; do
# # 使用 mysqladmin ping 检测
# # 注意:这里使用 127.0.0.1 而不是 localhost,避免使用 socket 文件可能带来的路径问题
# if $SUDO docker exec "$container_name" mysqladmin ping -h"127.0.0.1" -u"root" -p"$mysql_root_password" --silent 2>/dev/null; then
# log "INFO" "✅ MySQL 服务已就绪!"
# return 0
# fi
#
# # 如果失败,等待 2 秒后重试
# sleep 2
# count=$((count + 1))
# # 每 10 次打印一次进度,避免看起来像卡死
# if [ $((count % 10)) -eq 0 ]; then
# log "INFO" " 等待中... (已尝试 ${count}/${max_retries} 次)"
# fi
# done
#
# log "ERROR" "⛔ 等待 MySQL 启动超时,请检查容器日志"
# $SUDO docker logs "$container_name" | tail -20
# return 1
# }
#
# # 调用等待函数,如果返回失败则退出整个函数
# wait_for_mysql || return 1
#
# log "INFO" "✅ 容器启动成功,等待 MySQL 服务就绪..."
#
# # ------------------- 3. 【关键优化】清理潜在的死锁源 -------------------
# log "INFO" "🧹 正在清理潜在的僵尸连接..."
# # 获取所有非系统用户的连接 ID 并杀掉,防止旧事务占用锁
# # 使用 awk 过滤掉 'Id' 标题行和 'system user' 等系统进程
# local kill_sql=$($SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -e "SHOW FULL PROCESSLIST;" 2>/dev/null | \
# awk 'NR>1 && $4 != "system user" && $4 != "event_scheduler" && $11 !~ /NULL/ {print "KILL " $1 ";"}')
#
# if [[ -n "$kill_sql" ]]; then
# # 将所有 KILL 命令拼接执行
# echo "$kill_sql" | $SUDO docker exec -i "$container_name" mysql -uroot -p"$mysql_root_password" 2>/dev/null
# log "INFO" "✅ 已清理残留连接"
# else
# log "INFO" "✅ 无残留连接需要清理"
# fi
#
# # ------------------- 初始化数据库:创建用户、数据库、授权、导入数据 -------------------
# log "INFO" "🔧 初始化数据库:创建用户、数据库、授权..."
#
# # ------------------- 4. 拷贝 SQL 文件 -------------------
# log "INFO" "📁 正在拷贝 SQL 文件到容器..."
# local sql_files=("nacos_mysql.sql" "devops_voice.sql" "huazhao2.sql" "offline.sql" "ubains.sql" "devops.sql")
#
# for file in "${sql_files[@]}"; do
# if $SUDO docker cp "/data/temp/$file" "$container_name:/tmp/$file"; then
# log "INFO" "✅ 拷贝 $file 成功"
# else
# log "ERROR" "⛔ 拷贝 $file 失败"
# return 1
# fi
# done
#
#
# # ------------------- 6. 【修正版】带死锁重试的导入函数 -------------------
# import_sql() {
# local db=$1
# local file=$2
# local max_retries=3
# local retry_count=0
# local success=false
#
# while [ $retry_count -lt $max_retries ]; do
# log "INFO" "📥 正在导入 $file 到 $db... (尝试 $((retry_count + 1))/$max_retries)"
#
# # 【关键修改】使用 cat 管道符,让容器自己读取文件并传给 mysql
# # 这样既避免了宿主机的路径问题,又比 source 命令更稳定
# local output
# output=$($SUDO docker exec "$container_name" sh -c "cat /tmp/$file | mysql -uroot -p'$mysql_root_password' $db" 2>&1)
# local exit_code=$?
#
# if [ $exit_code -eq 0 ]; then
# log "INFO" "✅ $file 导入成功"
# success=true
# break
# elif echo "$output" | grep -q "Deadlock found"; then
# retry_count=$((retry_count + 1))
# if [ $retry_count -lt $max_retries ]; then
# log "WARN" "⚠️ 检测到死锁 (Error 1213),等待 5 秒后重试..."
# sleep 5
# else
# log "ERROR" "⛔ $file 导入失败:重试 $max_retries 次后仍遇到死锁"
# log "ERROR" "📄 错误详情: $output"
# fi
# else
# # 非死锁错误,直接失败
# log "ERROR" "⛔ $file 导入失败 (非死锁错误)"
# log "ERROR" "📄 错误详情: $output"
# return 1
# fi
# done
#
# if [ "$success" = false ]; then
# return 1
# fi
# return 0
# }
#
# # ------------------- 7. 执行导入 -------------------
# # 导入 Nacos 并更新 IP
# import_sql "nacos_mysql" "nacos_mysql.sql" || return 1
#
# log "INFO" "🔄 正在更新 Nacos 配置 IP..."
#
# # 【修正】使用 -e MYSQL_PWD="$mysql_root_password" 传递密码,避免 & 符号被 Shell 解析
# # 注意:这里不需要在 mysql 命令里再写 -p
# $SUDO docker exec -e MYSQL_PWD="$mysql_root_password" "$container_name" mysql -uroot -D nacos_mysql -e \
# "UPDATE config_info SET content = REPLACE(content, '192.168.9.84', '"$server_ip"')
# WHERE data_id IN ('auth-sso-auth-dev.yml','auth-sso-gateway-dev.yml','auth-sso-system-dev.yml');"
#
# $SUDO docker exec -e MYSQL_PWD="$mysql_root_password" "$container_name" mysql -uroot -D nacos_mysql -e "FLUSH PRIVILEGES;"
#
# # 导入其他数据库
# import_sql "devops_voice" "devops_voice.sql" || return 1
# import_sql "huazhao2" "huazhao2.sql" || return 1
# import_sql "offline" "offline.sql" || return 1
# import_sql "ubains" "ubains.sql" || return 1
# import_sql "devops" "devops.sql" || return 1
#
# # ------------------- 提升用户权限 -------------------
# for user in "root" "mysqluser"; do
# $SUDO docker exec "$container_name" mysql -u"root" -p"$mysql_root_password" -e \
# "UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='$user' AND Host='%'; FLUSH PRIVILEGES;" 2>/dev/null
# done
# log "INFO" "✅ 用户权限提升完成"
#
# # ------------------- 部署备份脚本 -------------------
# log "INFO" "📦 部署备份脚本到容器..."
# $SUDO mkdir -p "$(dirname "$backup_script_dst")"
# if $SUDO cp -f "$backup_script_src" "$backup_script_dst"; then
# $SUDO chmod +x "$backup_script_dst"
# log "INFO" "✅ 备份脚本已复制到: $backup_script_dst"
# else
# log "ERROR" "⛔ 备份脚本复制失败,请检查源文件是否存在"
# return 1
# fi
#
# # ------------------- 配置定时任务 -------------------
# log "INFO" "⏰ 配置定时备份任务 (每天 13:00)"
# local cron_job="0 13 * * * bash $backup_script_dst"
#
# if $SUDO crontab -u "$cron_user" -l 2>/dev/null | grep -Fq "$backup_script_dst"; then
# log "INFO" "✅ 定时任务已存在"
# else
# ( $SUDO crontab -u "$cron_user" -l 2>/dev/null; echo "$cron_job" ) | $SUDO crontab -u "$cron_user" -
# if [[ $? -eq 0 ]]; then
# log "INFO" "✅ 定时任务添加成功"
# else
# log "ERROR" "⛔ 定时任务添加失败"
# return 1
# fi
# fi
#
# # ------------------- 重启 crond -------------------
# log "INFO" "🔄 重启 crond 服务..."
# if command -v systemctl >/dev/null; then
# $SUDO systemctl restart crond || $SUDO systemctl restart cron
# else
# $SUDO service crond restart || $SUDO service cron restart
# fi
# log "INFO" "✅ crond 服务已重启"
#
# # ------------------- 最终状态输出 -------------------
# log "INFO" "🎉 MySQL 部署完成!"
# $SUDO docker ps --filter "name=$container_name" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
#
# return 0
#}
function mysql_x86() {
# --- 配置参数 ---
local container_name="umysql"
......@@ -509,11 +247,8 @@ function mysql_x86() {
fi
done
# 执行 source 导入 nacos_mysql.sql 到 nacos_mysql 数据库
log "INFO" "📥 正在导入 nacos_mysql.sql 到数据库 nacos_mysql..."
log "INFO" "✅ nacos_mysql.sql 数据导入成功"
# 在导入数据后执行 IP 替换
log "INFO" "🔄 正在更新配置中的 IP 地址..."
log "INFO" "🔄 正在更新nacos_mysql配置中的 IP 地址..."
$SUDO docker exec "$container_name" mysql -uroot -p"$mysql_root_password" -D nacos_mysql -e \
"UPDATE config_info SET content = REPLACE(content, '192.168.9.84', '"$server_ip"')
WHERE data_id IN ('auth-sso-auth-dev.yml','auth-sso-gateway-dev.yml','auth-sso-system-dev.yml');"
......
#!/bin/bash
#------------------------------工具类模块---------------------------------------------------
# 日志打印函数
LOG_FILE="/data/log/new_auto_script.log"
LOG_FILE="/data/logs/new_auto_script.log"
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
# 用户输入的东西也同步记录到日志信息里面
function log() {
......@@ -1191,7 +1191,7 @@ function getLatestVersion() {
log "INFO" "\033[36m
---------------------------------------------开始部署系统---------------------------------------------------
\033[0m"
server_ip
server_ip
server_ip="$IP"
#自动化脚本路径
auto_java=$PWD
......@@ -1202,19 +1202,20 @@ function getLatestVersion() {
firewalldjava
# 部署中间件服务(mysql, redis, emqx, fdfs, ngrok, nacos, nginx)
middleware_type="mysql redis emqx fdfs nacos nginx" install_middleware
ntp_uos
# deploy_services 调用方式:
# 1. 默认显示全部服务:deploy_services ""
# 2. 指定服务:deploy_services "meeting,monitor,voice"
# 3. 通过变量:deploy_services "$deploy_services_type"
deploy_services "meeting,cardtable,paperless"
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 120
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
deploy_jdk_host
start_java_meeting_service
malan
deploy_services
sleep 120
add_crontab_job
#检查中间件版本
getLatestVersion
#___________________________________________________________________________________
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 30
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
\ No newline at end of file
getLatestVersion
\ No newline at end of file
#!/bin/bash
#------------------------------工具类模块---------------------------------------------------
# 日志打印函数
LOG_FILE="/data/log/new_auto_script.log"
LOG_FILE="/data/logs/new_auto_script.log"
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
# 用户输入的东西也同步记录到日志信息里面
function log() {
......@@ -1191,7 +1191,7 @@ function getLatestVersion() {
log "INFO" "\033[36m
---------------------------------------------开始部署系统---------------------------------------------------
\033[0m"
server_ip
server_ip
server_ip="$IP"
#自动化脚本路径
auto_java=$PWD
......@@ -1203,22 +1203,21 @@ function getLatestVersion() {
# 部署中间件服务(mysql, redis, emqx, fdfs, ngrok, nacos, nginx)
middleware_type="mysql redis emqx fdfs ngrok nginx" install_middleware
ntp_uos
deploy_jdk_host
start_java_meeting_service
malan
# deploy_services 调用方式:
# 默认全部(不传参或空)
# deploy_services ""
# 指定运维系统服务
# 1. 默认显示全部服务:deploy_services ""
# 2. 指定服务:deploy_services "meeting,monitor,voice"
# 3. 通过变量:deploy_services "$deploy_services_type"
deploy_services "monitor,cardtable,paperless"
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 120
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
deploy_jdk_host
start_java_meeting_service
sleep 120
add_crontab_job
#检查中间件版本
getLatestVersion
#___________________________________________________________________________________
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 30
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
\ No newline at end of file
#检查中间件版本
getLatestVersion
\ No newline at end of file
#!/bin/bash
#------------------------------工具类模块---------------------------------------------------
# 日志打印函数
LOG_FILE="/data/log/new_auto_script.log"
LOG_FILE="/data/logs/new_auto_script.log"
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
# 用户输入的东西也同步记录到日志信息里面
function log() {
......@@ -1191,7 +1191,7 @@ function getLatestVersion() {
log "INFO" "\033[36m
---------------------------------------------开始部署系统---------------------------------------------------
\033[0m"
server_ip
server_ip
server_ip="$IP"
#自动化脚本路径
auto_java=$PWD
......@@ -1203,22 +1203,21 @@ function getLatestVersion() {
# 部署中间件服务(mysql, redis, emqx, fdfs, ngrok, nacos, nginx)
middleware_type="mysql redis emqx fdfs nginx" install_middleware
ntp_uos
deploy_jdk_host
start_java_meeting_service
malan
# deploy_services 调用方式:
# 默认全部(不传参或空)
# deploy_services ""
# 指定讯飞系统服务
# 1. 默认显示全部服务:deploy_services ""
# 2. 指定服务:deploy_services "meeting,monitor,voice"
# 3. 通过变量:deploy_services "$deploy_services_type"
deploy_services "voice,cardtable,paperless"
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 120
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
deploy_jdk_host
start_java_meeting_service
sleep 120
add_crontab_job
#检查中间件版本
getLatestVersion
#___________________________________________________________________________________
log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker
sleep 30
log "INFO" "查看服务是否启动成功——————docker ps"
log "INFO" "系统服务:umysql,uredis,ujava2,uemqx,ustorage,utracker "
$sudoset docker ps
\ No newline at end of file
#检查中间件版本
getLatestVersion
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论