2026/4/18 1:24:55
网站建设
项目流程
企业网站建设需要做些什么,有赞云 wordpress,如何推广宣传一个品牌,西安建设局官方网站定时备份history.db#xff0c;Shell脚本一键自动化
在使用 Fun-ASR 这类本地化语音识别系统时#xff0c;用户往往关注的是“识别准不准”、“速度快不快”#xff0c;却容易忽视一个关键问题#xff1a;你的识别历史数据安全吗#xff1f;
Fun-ASR WebUI 会将每一次语…定时备份history.dbShell脚本一键自动化在使用 Fun-ASR 这类本地化语音识别系统时用户往往关注的是“识别准不准”、“速度快不快”却容易忽视一个关键问题你的识别历史数据安全吗Fun-ASR WebUI 会将每一次语音转写的结果、参数配置和文件信息完整记录在一个名为history.db的 SQLite 数据库中。这个文件位于webui/data/history.db虽然体积不大却是你所有语音处理工作的“数字记忆”。一旦误操作清空记录、系统崩溃或硬盘损坏这些数据将永久丢失。更现实的风险是“清空所有记录”功能无回收站机制多人共用服务器时可能被意外覆盖长期运行后数据库文件可能因异常中断而损坏因此定期备份history.db不是“可选项”而是保障数据资产的必要措施。本文将带你从零开始编写一个实用、健壮的 Shell 脚本结合 Linux 的cron定时任务实现自动备份 版本管理 空间清理的全流程解决方案真正做到“一次配置长期无忧”。1. 明确需求我们需要什么样的备份方案在动手写脚本前先明确几个核心目标1.1 自动化执行无需人工干预每天固定时间自动完成备份。1.2 带时间戳命名每次备份文件名包含日期时间如history_20250405_020000.db便于追溯。1.3 指定备份目录统一存放到独立路径如/backup/funasr避免与源文件混杂。1.4 控制保留周期只保留最近7天的备份防止磁盘空间无限增长。1.5 异常处理与日志记录备份失败时能留下线索方便排查问题。满足以上五点才算是一套真正可用的生产级备份策略。2. 准备工作确认路径与权限在编写脚本之前请先确认以下信息# 查看当前工作目录结构 ls -l webui/data/history.db # 输出示例 # -rw-r--r-- 1 user user 48768 Jan 15 10:30 webui/data/history.db你需要获取数据库文件绝对路径例如/home/user/Fun-ASR/webui/data/history.db备份存储路径建议创建专用目录如/backup/funasr执行用户权限确保该用户对源文件有读取权对备份目录有写入权创建备份目录并设置权限sudo mkdir -p /backup/funasr sudo chown $USER:$USER /backup/funasr3. 编写核心备份脚本下面是一个功能完整的 Shell 脚本实现了上述全部需求。3.1 创建脚本文件nano /home/user/backup_funasr.sh3.2 脚本内容#!/bin/bash # # Fun-ASR history.db 自动备份脚本 # 功能定时备份 时间戳命名 旧文件清理 # 作者科哥推荐实践 # 使用前请修改 SOURCE_DB 和 BACKUP_DIR 路径 # # 配置项 - 请根据实际情况修改 SOURCE_DB/home/user/Fun-ASR/webui/data/history.db BACKUP_DIR/backup/funasr LOG_FILE$BACKUP_DIR/backup.log # 创建备份目录如果不存在 mkdir -p $BACKUP_DIR # 生成时间戳格式YYYYMMDD_HHMMSS TIMESTAMP$(date %Y%m%d_%H%M%S) BACKUP_NAMEhistory_$TIMESTAMP.db BACKUP_PATH$BACKUP_DIR/$BACKUP_NAME # 日志函数 log() { echo [$(date %Y-%m-%d %H:%M:%S)] $1 | tee -a $LOG_FILE } # 开始备份流程 log 开始备份 history.db... # 检查源文件是否存在 if [ ! -f $SOURCE_DB ]; then log ❌ 错误源文件不存在路径$SOURCE_DB exit 1 fi # 执行复制操作 cp $SOURCE_DB $BACKUP_PATH # 检查是否复制成功 if [ $? -eq 0 ]; then log ✅ 成功备份到$BACKUP_PATH else log ❌ 备份失败请检查权限或磁盘空间 exit 1 fi # 清理7天前的旧备份 find $BACKUP_DIR -name history_*.db -mtime 7 -type f -delete log 已清理7天前的旧备份文件 # 可选验证最新备份是否可读简单检查文件大小 SIZE$(stat -c%s $BACKUP_PATH 2/dev/null) if [ $SIZE -gt 0 ] 2/dev/null; then log 备份文件大小${SIZE} 字节状态正常 else log ⚠️ 警告备份文件为空或无法读取 fi log 备份流程结束3.3 设置脚本可执行权限chmod x /home/user/backup_funasr.sh4. 测试脚本是否正常工作在加入定时任务前务必手动运行一次测试/home/user/backup_funasr.sh预期输出查看终端及日志[2025-04-05 02:00:00] 开始备份 history.db... [2025-04-05 02:00:00] ✅ 成功备份到/backup/funasr/history_20250405_020000.db [2025-04-05 02:00:00] 已清理7天前的旧备份文件 [2025-04-05 02:00:00] 备份文件大小49152 字节状态正常 [2025-04-05 02:00:00] 备份流程结束同时检查备份目录ls -l /backup/funasr/你应该能看到类似这样的文件-rw-r--r-- 1 user user 49152 Apr 5 02:00 history_20250405_020000.db -rw-r--r-- 1 user user 567 Apr 5 02:00 backup.log5. 配置定时任务让备份自动化Linux 下最常用的定时任务工具是cron。我们使用它来每天凌晨2点自动执行备份。5.1 编辑 crontabcrontab -e5.2 添加定时规则在文件末尾添加一行0 2 * * * /home/user/backup_funasr.sh /backup/funasr/cron.log 21这行命令的含义是0 2 * * *每天 02:00:00 执行/home/user/backup_funasr.sh要执行的脚本 /backup/funasr/cron.log 21将输出和错误信息追加记录到日志文件5.3 保存并退出按CtrlX→Y→ 回车如果你使用的是 nano 编辑器6. 高级技巧增强脚本的健壮性为了应对更复杂的场景可以对脚本进行以下优化。6.1 添加锁机制防止重复执行当系统卡顿或 cron 任务异常时可能导致脚本多次并发运行从而引发资源竞争。可通过文件锁避免LOCK_FILE$BACKUP_DIR/.backup.lock # 检查锁文件 if [ -f $LOCK_FILE ]; then PID$(cat $LOCK_FILE) if kill -0 $PID /dev/null 21; then log ⚠️ 脚本已在运行PID: $PID跳过本次执行 exit 0 else log 发现旧锁文件但进程不存在可能是异常退出重新启动 rm -f $LOCK_FILE fi fi # 创建锁文件 echo $$ $LOCK_FILE在脚本末尾添加# 删除锁文件 rm -f $LOCK_FILE6.2 发送邮件通知可选若希望在备份失败时收到提醒可集成邮件发送功能# 示例使用 mail 命令需安装 mailutils if [ $? -ne 0 ]; then echo Fun-ASR 备份失败时间$(date) | mail -s 【警告】备份异常 youremail.com fi6.3 支持压缩备份节省空间对于频繁使用的系统可启用 gzip 压缩# 备份后压缩 gzip $BACKUP_PATH # 对应清理命令也需更新 find $BACKUP_DIR -name history_*.db.gz -mtime 7 -delete7. 恢复数据如何从备份中还原万一发生数据丢失恢复过程非常简单7.1 停止 Fun-ASR 服务# 根据你的部署方式停止服务 pkill -f python.*start_app.py # 或者使用 systemctl、docker 等方式7.2 替换数据库文件选择一个最近的有效备份cp /backup/funasr/history_20250405_020000.db /home/user/Fun-ASR/webui/data/history.db7.3 重启服务cd /home/user/Fun-ASR bash start_app.sh访问 WebUI 的“识别历史”页面即可看到恢复的数据。⚠️ 注意恢复前建议先对当前history.db做一次临时备份以防误操作。8. 最佳实践总结项目推荐做法备份频率每日一次高频率使用者建议每小时一次备份位置独立硬盘、NAS、云同步目录远离原主机命名规范history_YYYYMMDD_HHMMSS.db清晰易排序保留周期至少7天重要数据建议永久归档权限控制备份目录设为只读恢复时再开放写权限验证机制定期抽查备份文件能否打开、数据是否完整跨设备同步使用 Syncthing、Resilio Sync 等工具同步备份目录9. 总结让数据保护成为习惯history.db虽小却是 Fun-ASR 用户最重要的数据资产之一。它记录了每一次语音输入的上下文、结果和配置构成了可追溯、可分析的知识链条。通过本文介绍的 Shell 脚本 cron 方案你可以轻松实现全自动备份无需人工干预版本化管理随时回退到任意时间点空间可控自动清理陈旧备份故障可恢复快速应对误删或系统崩溃技术的价值不仅体现在“智能识别”更在于“稳定可靠”。花10分钟配置好这套备份机制未来某一天它可能会帮你挽回数周的工作成果。现在就行动吧找到你的history.db写下第一个备份脚本加入定时任务做一次恢复演练让你的每一次声音转化都有迹可循有据可依。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。