Local-Voice/auto_update.sh
2025-09-26 23:43:02 +08:00

146 lines
3.3 KiB
Bash
Executable File

#!/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"