#!/bin/bash # 自动更新脚本 # 从指定URL下载tar文件并覆盖 Local-Voice 文件夹 LOG_FILE="/home/zhuchaowe/logs/auto_update.log" DOWNLOAD_URL="http://120.26.23.172:8082/Local-Voice.tar" BACKUP_DIR="/home/zhuchaowe/Local-Voice-backup-$(date +%Y%m%d_%H%M%S)" LOCAL_VOICE_DIR="/home/zhuchaowe/Local-Voice" # 创建日志目录 mkdir -p /home/zhuchaowe/logs # 日志函数 log() { local message="[$(date '+%Y-%m-%d %H:%M:%S')] $1" echo "$message" | tee -a "$LOG_FILE" } # 错误处理函数 error_exit() { log "错误: $1" exit 1 } # 检查网络连接 check_network() { log "检查网络连接..." if ping -c 1 120.26.23.172 > /dev/null 2>&1; then log "网络连接正常" return 0 else log "网络连接失败,等待网络就绪..." return 1 fi } # 等待网络连接 wait_for_network() { local max_attempts=30 local attempt=1 while [ $attempt -le $max_attempts ]; do log "尝试连接网络 ($attempt/$max_attempts)..." if check_network; then return 0 fi sleep 5 attempt=$((attempt + 1)) done error_exit "网络连接超时" } # 备份现有代码 backup_existing_code() { log "备份现有代码到 $BACKUP_DIR..." if cp -r "$LOCAL_VOICE_DIR" "$BACKUP_DIR"; then log "备份成功" else error_exit "备份失败" fi } # 更新代码 update_code() { log "开始更新代码..." # 进入临时目录 cd /tmp || error_exit "无法进入临时目录" # 删除旧的下载文件(如果存在) rm -f Local-Voice.tar rm -rf Local-Voice-extracted # 下载最新代码 log "下载更新文件..." if wget -O Local-Voice.tar "$DOWNLOAD_URL"; then log "下载成功" else error_exit "下载文件失败" fi # 解压文件 log "解压文件..." mkdir -p Local-Voice-extracted if tar -xf Local-Voice.tar -C Local-Voice-extracted; then log "解压成功" else error_exit "解压文件失败" fi # 复制新代码到目标目录 log "复制新代码到 $LOCAL_VOICE_DIR..." cp -r Local-Voice-extracted/* "$LOCAL_VOICE_DIR"/ || error_exit "复制代码失败" # 恢复文件权限 log "恢复文件权限..." chmod +x "$LOCAL_VOICE_DIR"/*.sh chmod +x "$LOCAL_VOICE_DIR"/test-*.py # 清理临时文件 cd /tmp rm -f Local-Voice.tar rm -rf Local-Voice-extracted log "代码更新完成" } # 清理旧备份 cleanup_old_backups() { log "清理旧备份文件..." # 保留最近5个备份 cd /home/zhuchaowe ls -dt Local-Voice-backup-* | tail -n +6 | xargs rm -rf log "清理完成" } # 主函数 main() { log "=== 开始自动更新 ===" # 等待网络连接 wait_for_network # 检查 Local-Voice 目录是否存在 if [ ! -d "$LOCAL_VOICE_DIR" ]; then log "Local-Voice 目录不存在,创建新目录" mkdir -p "$LOCAL_VOICE_DIR" fi # 备份现有代码 backup_existing_code # 更新代码 update_code # 清理旧备份 cleanup_old_backups log "=== 自动更新完成 ===" echo "Auto update completed successfully at $(date '+%Y-%m-%d %H:%M:%S')" } # 执行主函数 main 2>&1 | tee -a "$LOG_FILE"