146 lines
3.3 KiB
Bash
Executable File
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" |