如何备份输出文件?unet自动化脚本编写示例
1. 功能概述与技术背景
本工具基于阿里达摩院 ModelScope 平台的DCT-Net 模型(cv_unet_person-image-cartoon),实现高质量人像到卡通风格的转换。该模型采用改进型 U-Net 架构,结合对抗训练机制,在保留人物面部特征的同时生成具有艺术感的卡通图像。
在实际使用过程中,用户通过 WebUI 界面上传图片并设置参数后,系统会将生成结果自动保存至本地outputs/目录。然而,为防止数据丢失、便于长期归档或跨设备同步,有必要构建一套自动化输出文件备份机制。
本文将围绕“如何编写自动化脚本实现输出文件备份”这一核心问题,提供一个可落地的 Shell 脚本实践方案,并集成到现有流程中,确保每次生成的卡通化结果都能被安全、有序地归档。
2. 备份需求分析
2.1 当前输出机制回顾
根据用户手册说明:
- 输出路径:
项目目录/outputs/ - 文件命名格式:
outputs_年月日时分秒.png
虽然已有基本存储逻辑,但存在以下风险:
- 未做定期归档 → 存储混乱
- 缺乏远程备份 → 单点故障风险
- 无版本控制 → 难以追溯历史结果
2.2 自动化备份目标
| 目标 | 说明 |
|---|---|
| ✅ 定时归档 | 每日自动打包昨日输出文件 |
| ✅ 远程同步 | 支持上传至 NAS 或云存储 |
| ✅ 命名规范 | 按日期组织目录结构 |
| ✅ 日志记录 | 记录备份状态与错误信息 |
| ✅ 可集成 | 与原run.sh脚本协同运行 |
3. 自动化备份脚本设计与实现
3.1 脚本功能模块划分
我们将构建一个名为backup_outputs.sh的 Shell 脚本,包含以下关键模块:
- 环境变量定义
- 目录与时间处理
- 文件归档打包
- 远程同步(可选)
- 日志写入与清理
3.2 核心脚本代码
#!/bin/bash # ======================================== # unet_cartoon 输出文件自动化备份脚本 # 作者:科哥 # 功能:每日归档 outputs 目录下的生成文件 # ======================================== # --- 配置区 --- PROJECT_ROOT="/root/unet_person_image_cartoon" OUTPUT_DIR="$PROJECT_ROOT/outputs" BACKUP_DIR="$PROJECT_ROOT/backups" DATE_TODAY=$(date +%Y%m%d) DATE_YESTERDAY=$(date -d "yesterday" +%Y%m%d) LOG_FILE="$PROJECT_ROOT/logs/backup.log" # 创建必要目录 mkdir -p "$BACKUP_DIR" mkdir -p "$(dirname "$LOG_FILE")" # --- 日志函数 --- log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } log "开始执行备份任务..." # --- 查找昨日输出文件 --- FILE_PATTERN="output_${DATE_YESTERDAY}*.png" FILES_TO_BACKUP=$(find "$OUTPUT_DIR" -name "$FILE_PATTERN" 2>/dev/null || "") if [ -z "$FILES_TO_BACKUP" ]; then log "警告:未找到匹配 $DATE_YESTERDAY 的输出文件。" else # --- 打包归档 --- ARCHIVE_NAME="cartoon_outputs_${DATE_YESTERDAY}.tar.gz" ARCHIVE_PATH="$BACKUP_DIR/$ARCHIVE_NAME" tar -czf "$ARCHIVE_PATH" -C "$OUTPUT_DIR" $(basename $FILES_TO_BACKUP) 2>>"$LOG_FILE" if [ $? -eq 0 ]; then log "成功创建归档文件: $ARCHIVE_NAME" # --- 可选:远程同步(示例使用 rsync 到局域网 NAS)--- # RSINC_TARGET="user@nas.local:/volume1/cartoon_backups/" # rsync -avz "$ARCHIVE_PATH" "$RSINC_TARGET" >> "$LOG_FILE" 2>&1 # if [ $? -eq 0 ]; then # log "已同步至远程存储: $RSINC_TARGET" # else # log "警告:远程同步失败,请检查网络或权限" # fi # --- 清理原始文件(谨慎操作)--- # read -p "是否删除已归档的原始文件?[y/N] " confirm # if [[ $confirm =~ ^[Yy]$ ]]; then # rm $FILES_TO_BACKUP # log "已删除已归档的原始文件" # fi else log "错误:归档过程失败,请检查磁盘空间或权限" fi fi log "备份任务结束\n"3.3 脚本部署与调用方式
方法一:手动执行
/bin/bash /root/backup_outputs.sh方法二:定时任务(推荐)
编辑 crontab 实现每日自动备份:
crontab -e添加如下行(每天凌晨 2:00 执行):
0 2 * * * /bin/bash /root/backup_outputs.sh >> /root/logs/cron.log 2>&1提示:可通过
crontab -l查看当前计划任务。
4. 与主程序集成建议
为了使备份脚本无缝融入原有工作流,建议进行以下整合:
4.1 修改启动脚本run.sh
在原有run.sh中追加对备份脚本的调用(非阻塞方式):
#!/bin/bash # 启动 WebUI 服务 nohup python app.py --server_port 7860 > webui.log 2>&1 & # 启动备份守护进程(每小时检测一次新文件) ( while true; do /bin/bash /root/backup_outputs.sh sleep 3600 # 每小时运行一次 done ) &⚠️ 注意:若仅需每日归档,仍建议使用 cron,避免资源浪费。
4.2 输出目录结构优化建议
调整输出路径按日期分类,提升可管理性:
outputs/ ├── 20260104/ │ ├── output_20260104102345.png │ └── output_20260104110123.png ├── 20260105/ │ └── output_20260105091234.png └── ...对应地修改 Python 应用中的保存逻辑:
import datetime timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") date_folder = datetime.datetime.now().strftime("%Y%m%d") output_subdir = os.path.join("outputs", date_folder) os.makedirs(output_subdir, exist_ok=True) filename = f"output_{timestamp}.png" filepath = os.path.join(output_subdir, filename)此结构调整后,备份脚本可直接按子目录整体移动,大幅提升效率。
5. 安全与维护建议
5.1 权限与安全性
- 确保脚本具有可执行权限:
chmod +x /root/backup_outputs.sh- 避免在脚本中硬编码敏感信息(如密码)
- 使用 SSH 密钥认证替代密码进行远程同步
5.2 存储空间管理
建议增加磁盘使用监控机制:
# 在脚本末尾添加 DISK_USAGE=$(df -h "$PROJECT_ROOT" | awk 'NR==2 {print $5}' | tr -d '%') if [ $DISK_USAGE -gt 90 ]; then log "警告:磁盘使用率超过 90% ($DISK_USAGE%)" fi5.3 备份验证机制(进阶)
可定期解压随机归档文件,校验其完整性:
# 示例:验证 tar 包完整性 tar -tzf "$ARCHIVE_PATH" > /dev/null 2>&1 if [ $? -ne 0 ]; then log "严重:归档文件损坏!路径: $ARCHIVE_PATH" fi6. 总结
6. 总结
本文针对UNet 人像卡通化工具的输出文件管理问题,提出并实现了完整的自动化备份解决方案。主要内容包括:
- 需求明确:识别出原始输出机制存在的数据安全风险;
- 脚本开发:编写了功能完整、结构清晰的 Shell 备份脚本,支持文件归档、日志记录和远程同步扩展;
- 集成方案:提供了与主应用
run.sh的两种集成模式(cron 定时任务 + 后台守护进程); - 工程优化:建议调整输出目录结构以支持更高效的归档管理;
- 运维保障:补充了权限控制、磁盘监控和备份验证等生产级防护措施。
通过引入该自动化机制,用户不仅可以有效防止生成结果丢失,还能建立起规范化的 AI 内容资产管理体系,为后续的数据复用、效果对比和模型迭代打下坚实基础。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。