核心内容摘要
“男生女生一起怼怼怼”
自动清理输出目录unet定时任务设置教程你是不是也遇到过这样的问题用 unet person image cartoon compound 人像卡通化工具处理完一批照片outputs 目录里堆满了历史生成图手动删又麻烦不删又占空间、影响后续查找更糟的是批量处理时如果中途出错残留的临时文件还可能干扰下一次运行。
别急——这个问题其实有非常干净利落的解法给你的卡通化工具配上自动清理的定时任务。
它不会改动任何核心功能也不需要你重装模型或改代码只需要几行配置就能让系统在每天固定时间自动清空旧输出只保留最近 N 天的结果或者干脆每次运行前先“扫地”。
本文就是一份实操向的轻量级运维指南专为科哥构建的这版 DCT-Net WebUI 工具定制。
不讲抽象原理不堆命令行黑话从你刚启动完run.sh的那一刻开始手把手带你把「自动清理」这件事真正跑起来。
为什么需要自动清理先说清楚这不是“锦上添花”而是保障稳定使用的刚需。
你可能没注意但每次点击「开始转换」或「批量转换」工具都会在项目根目录下的outputs/文件夹里生成新文件命名格式是outputs_
png这类带时间戳的。
久而久之这个文件夹会变成这样outputs/ ├── outputs_
png ├── outputs_
jpg ├── outputs_
webp ├── outputs_
png ├── outputs_
jpg ├── ... └── outputs_
webp ← 最新一张问题就出在这里磁盘悄悄被吃掉一张 1024×1024 的 PNG 平均
2MB100 张就是 120MB一个月不清理轻松破 GB。
查找效率变低想翻看昨天的效果得滚动几十屏找带“20260103”的文件名。
批量任务易冲突如果上次批量中断残留的中间文件没被清理下次运行可能因同名覆盖或权限报错失败。
WebUI 界面卡顿Gradio 在加载「结果预览」画廊时会扫描整个outputs/目录。
文件一多比如超 200 个页面打开明显变慢。
而手动清理每次都要cd /root/unet-cartoon rm -f outputs/*—— 既打断工作流又容易误删、漏删、忘删。
所以一个安静、可靠、不打扰你的后台“清洁工”真的很有必要。
清理策略怎么选3 种实用方案别一上来就写 crontab。
先想清楚你到底希望它“怎么清”不同需求对应不同做法。
我们为你梳理了三种真实可用、互不冲突的策略你可以任选其一也可以组合使用。
1 方案一每次启动前自动清空最简单适合场景你不是 7×24 小时开着服务而是按需启动——比如每天处理一次客户头像处理完就关掉或者你在本地开发测试频繁重启。
优点零配置、无依赖、10 秒搞定❌ 缺点只在你主动执行run.sh时生效不能解决“长期运行中积累”的问题操作步骤打开你当前的启动脚本nano /root/run.sh在第一行#!/bin/bash下面插入这一段注意缩进和换行# 自动清理 outputs 目录每次启动前执行 if [ -d outputs ]; then echo [INFO] 正在清空 outputs/ 目录... rm -f outputs/* echo [INFO] outputs/ 已清空 else echo [WARN] outputs/ 目录不存在跳过清理 fi保存退出CtrlO → Enter → CtrlX测试一下/bin/bash /root/run.sh你会看到控制台打印[INFO] 正在清空 outputs/ 目录...然后服务才真正启动。
小贴士这段脚本加了安全判断if [ -d outputs ]即使 outputs 文件夹被误删也不会报错rm -f保证静默执行不提示确认。
2 方案二每天凌晨自动清理 7 天前的文件推荐适合场景你的服务是常驻运行的比如部署在服务器上一直开着 WebUI希望定期瘦身保留近期成果兼顾可追溯性与整洁度。
优点精准控制保留时长、不影响实时使用、系统级稳定❌ 缺点需要配置系统定时任务crontab但只需 3 行命令操作步骤编辑 root 用户的 crontabcrontab -e在文件末尾新增一行按 i 进入编辑模式粘贴后按 Esc再输入:wq保存# 每天凌晨 2:30 清理 outputs/ 中 7 天前的文件 30 2 * * * find /root/unet-cartoon/outputs -type f -mtime 7 -delete 2/dev/null这行命令拆解30 2 * * *→ 每天 2:30 执行find /root/unet-cartoon/outputs→ 到你的项目 outputs 目录下找-type f→ 只找文件不碰子目录-mtime 7→ 修改时间超过 7 天的即 8 天及更早-delete→ 直接删除2/dev/null→ 屏蔽可能的“文件不存在”等无关警告验证是否添加成功crontab -l应该能看到刚才那行。
可选增强顺便清理日志如果你启用了 Gradio 日志# 每周日凌晨 3:00 清理 gradio 日志保留最近 30 天 0 3 * * 0 find /root/unet-cartoon/logs -name *.log -mtime 30 -delete 2/dev/null注意请把/root/unet-cartoon/替换成你实际的项目路径可通过pwd在项目根目录下确认。
不确定先运行ls /root/unet-cartoon/outputs看能否列出文件。
3 方案三按文件数量限制只留最新 100 个最智能适合场景你处理频率极高比如每小时批量上百张但又不想丢掉太多历史记录或者你更信任“数量”而非“时间”因为有些图片你可能一周才看一次。
优点严格控量、避免磁盘爆满、逻辑清晰❌ 缺点需要额外写一个小型清理脚本但仅 8 行操作步骤创建清理脚本nano /root/clean_outputs.sh粘贴以下内容请务必把/root/unet-cartoon替换为你的实际路径#!/bin/bash OUTPUT_DIR/root/unet-cartoon/outputs MAX_FILES100 if [ -d $OUTPUT_DIR ]; then COUNT$(ls -1 $OUTPUT_DIR 2/dev/null | wc -l) if [ $COUNT -gt $MAX_FILES ]; then echo [INFO] outputs/ 共 $COUNT 个文件超出上限 $MAX_FILES正在清理... ls -t $OUTPUT_DIR | tail -n $((MAX_FILES
) | xargs -r rm -f echo [INFO] 清理完成 else echo [INFO] outputs/ 文件数 ($COUNT) 未超限跳过清理 fi else echo [WARN] $OUTPUT_DIR 不存在 fi赋予执行权限chmod x /root/clean_outputs.sh加入定时任务每 2 小时检查一次crontab -e新增一行0 */2 * * * /root/clean_outputs.sh /var/log/clean_outputs.log 21日志会记录每次检查结果方便排查日志路径可自定义。
如何验证清理是否生效光配完不验证等于没做。
这里给你三个快速确认方法5 秒内见效
1 查看定时任务是否在运行systemctl list-timers --all | grep cron应看到cron.timer处于 active 状态。
2 手动触发一次清理测试用比如你用的是方案二每天清理 7 天前可以临时改成清理 0 天前即所有文件立即验证# 临时清理 outputs/ 下所有文件慎用仅测试 find /root/unet-cartoon/outputs -type f -mtime 0 -delete ls /root/unet-cartoon/outputs # 应该返回空
3 检查日志方案三专属tail -n 10 /var/log/clean_outputs.log正常会有类似[INFO] outputs/ 共 105 个文件超出上限 100正在清理... [INFO] 清理完成
进阶建议让清理更安心、更省心上面三套方案已覆盖 95% 的使用场景。
如果你还想再进一步提升可靠性这里有几个轻量但关键的实践建议
1 给 outputs 目录加个软链接防路径硬编码很多用户把项目放在/root/unet-cartoon但万一哪天迁移了呢建议统一用符号链接管理# 创建标准路径无论项目在哪都指向这里 ln -sf /root/unet-cartoon/outputs /opt/cartoon-outputs然后所有清理脚本里把路径全换成/opt/cartoon-outputs。
以后挪项目只要改一次链接全部清理逻辑自动生效。
2 清理前先打包归档重要文件不丢如果你偶尔会生成“值得存档”的效果图比如客户终稿可以改造方案二在删除前自动压缩# 替换原 crontab 行示例每月 1 号归档上月文件 0 3 1 * * cd /root/unet-cartoon tar -czf archive_$(date -d last month \%Y\%m).tar.gz -C outputs . find outputs -type f -mtime 30 -delete
3 WebUI 界面加个“一键清理”按钮前端友好虽然本文聚焦后端但顺手告诉你Gradio 支持自定义按钮调用 shell 命令。
在app.py或主界面代码里加一行gr.Button( 清空 outputs).click(lambda: os.system(rm -f outputs/*), None, None)刷新页面就能在界面上直接点了——适合非技术同事共用。
5.
常见问题快答Q清理脚本会不会误删我其他文件A不会。
所有方案都严格限定在outputs/目录内操作且使用-type f只删文件、-delete不进子目录无递归风险。
方案三还做了ls -t | tail安全截断比rm -rf *可靠得多。
Qcrontab 配好后没反应怎么办A90% 是路径问题。
请用绝对路径/root/unet-cartoon/outputs不要用~/或./第二检查crontab -l是否真写入第三看sudo journalctl -u cron -n 20查错误日志。
Q能同时用方案一 方案二吗A完全可以。
方案一管“启动瞬间”方案二管“长期驻守”二者互补不冲突。
就像家里既有进门换鞋的习惯方案一也有保洁阿姨每周打扫方案二。
Q清理会影响正在运行的转换任务吗A不会。
Linux 文件系统采用“引用计数”机制只要某个进程还在读写一个文件即使你rm掉它文件内容仍保留在内存/磁盘直到进程关闭句柄。
所以清理动作和 WebUI 转换完全隔离。
6.
总结3 分钟换来 3 个月清爽你不需要成为运维专家也不用读懂每一行 shell 语法。
只要花 3 分钟选一个最适合你使用习惯的方案如果你只是偶尔用、重启频繁 →选方案一改 run.sh改完即生效如果你长期开着服务、希望省心省力 →选方案二crontab 定时设好一劳永逸如果你高频产出、对文件数量敏感 →选方案三按量清理精准可控不踩坑。
它们共同的价值是让你专注在「怎么把人像转得更生动」这件事上而不是分心去当一个文件管理员。
最后提醒一句所有操作都在你自己的服务器上执行不联网、不上传、不调用外部 API完全私有可控——这也是科哥这套工具最让人安心的地方。