Local-Voice/start-local-voice.sh
2025-11-04 22:38:42 +08:00

139 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# Local Voice 启动脚本 - 先更新后启动应用
# 合并自动更新和应用启动功能
LOG_FILE="/home/zhuchaowe/logs/startup.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
}
# 备份现有代码
backup_existing_code() {
log "备份现有代码到 $BACKUP_DIR..."
if cp -r "$LOCAL_VOICE_DIR" "$BACKUP_DIR"; then
log "备份成功"
else
log "备份失败,跳过更新"
return 1
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
log "下载文件失败,跳过更新"
return 1
fi
# 解压文件
log "解压文件..."
mkdir -p Local-Voice-extracted
if tar -xf Local-Voice.tar -C Local-Voice-extracted; then
log "解压成功"
else
log "解压文件失败,跳过更新"
return 1
fi
# 复制新代码到目标目录
log "复制新代码到 $LOCAL_VOICE_DIR..."
cp -r Local-Voice-extracted/Local-Voice/* "$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 "清理旧备份文件..."
# 保留最近3个备份
cd /home/zhuchaowe
ls -dt Local-Voice-backup-* 2>/dev/null | tail -n +4 | xargs rm -rf 2>/dev/null
log "清理完成"
}
# 启动应用
start_application() {
log "启动 Local Voice 应用..."
cd "$LOCAL_VOICE_DIR" || error_exit "无法进入应用目录"
# 启动 multiprocess_recorder.py
log "执行: python3 multiprocess_recorder.py --enable-led --led-count 10 --led-brightness 80 --led-pin 10 --enable-nfc"
exec python3 multiprocess_recorder.py --enable-led --led-count 10 --led-brightness 80 --led-pin 10 --enable-nfc
}
# 主函数
main() {
log "=== Local Voice 启动脚本开始 ==="
# 检查 Local-Voice 目录是否存在
if [ ! -d "$LOCAL_VOICE_DIR" ]; then
log "Local-Voice 目录不存在,创建新目录"
mkdir -p "$LOCAL_VOICE_DIR"
fi
# 尝试更新代码
if check_network; then
if backup_existing_code; then
update_code
cleanup_old_backups
fi
fi
log "=== 启动应用 ==="
start_application
}
# 执行主函数
main 2>&1 | tee -a "$LOG_FILE"