news 2026/4/29 18:39:03

如何实现定时任务?unet自动化调度脚本示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何实现定时任务?unet自动化调度脚本示例

如何实现定时任务?unet自动化调度脚本示例

1. 为什么需要定时任务?

你有没有遇到过这些情况:

  • 每天早上8点自动处理一批新上传的人像照片,生成卡通风格预览图发到工作群;
  • 每隔两小时从指定文件夹扫描新增图片,避免人工反复点击“批量转换”;
  • 夜间服务器空闲时自动清理outputs/目录中超过24小时的临时结果,节省磁盘空间;
  • 周一至周五上午9点准时推送昨日卡通化处理统计(共处理XX张、平均耗时X秒)。

这些都不是靠手动点击能长期坚持的——人会忘记、会偷懒、会下班。而一台部署好的unet人像卡通化服务,只要配上一个轻量级定时调度脚本,就能变成真正“不知疲倦”的AI小助手。

本文不讲复杂调度系统(如Airflow、Celery),而是用最直接、最易懂、零依赖的方式,教你用Linux原生命令+几行Shell脚本,把科哥构建的这个基于DCT-Net的卡通化工具,变成一台全自动运转的“人像风格化工厂”。

全程无需改一行Python代码,不装新包,不碰WebUI源码,5分钟即可上线。


2. 先搞清:这个服务到底怎么“被调用”?

很多教程失败,是因为没分清“谁在调用谁”。我们先明确三个关键角色:

  • WebUI服务本身:运行在http://localhost:7860的Gradio界面,提供图形操作;
  • 后端模型服务:实际执行卡通化推理的Python进程(加载了cv_unet_person-image-cartoon);
  • 外部调度者:我们要写的定时脚本——它不打开浏览器,也不点按钮,而是模拟用户提交表单的行为

好消息是:这个WebUI虽是Gradio搭建,但完全开放了API端点。你打开浏览器开发者工具 → Network → 点击“开始转换”,就能看到它向/run/predict发送了一个POST请求,携带了图片base64、参数等数据。

但我们不用这么复杂。更简单、更稳定、更适合定时任务的方式是:直接调用其内置的CLI命令接口

翻看科哥提供的run.sh脚本和项目结构,你会发现它底层封装了一个可执行的Python入口。我们不需要逆向,只需确认一件事:服务支持命令行批量处理模式

验证方法很简单,在终端执行:

cd /root/unet-cartoon-app python app.py --help

如果输出类似:

usage: app.py [-h] [--input INPUT] [--output OUTPUT] [--resolution RESOLUTION] [--strength STRENGTH] [--format FORMAT]

恭喜——你已掌握全自动化的钥匙。

注意:本文所有操作均基于你已完成基础部署(即/bin/bash /root/run.sh能成功启动WebUI)。若尚未部署,请先完成该步,再继续。


3. 实战:三类高频定时场景脚本详解

我们不写抽象理论,只给能立刻复制粘贴、改两处路径就能跑的脚本。每个脚本都包含:用途说明 + 完整代码 + 使用说明 + 防坑提示

3.1 场景一:每30分钟扫描并处理新图片(无人值守流水线)

适用于:云服务器挂载NAS相册目录、团队共享文件夹自动美化。

脚本内容(保存为/root/scripts/auto-process.sh
#!/bin/bash # ================================ # unet人像卡通化 - 自动扫描处理脚本 # 功能:每30分钟检查 input/ 目录,对新图片批量转卡通,结果存 outputs/ # 作者:科哥方案延伸 | 修改于2026年 # ================================ INPUT_DIR="/root/unet-cartoon-app/input" OUTPUT_DIR="/root/unet-cartoon-app/outputs" LOG_FILE="/root/unet-cartoon-app/logs/auto-process.log" TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') # 创建日志和输出目录(若不存在) mkdir -p "$OUTPUT_DIR" "$INPUT_DIR" "$(dirname "$LOG_FILE")" # 获取input目录下所有待处理图片(排除已处理过的) # 我们用文件修改时间 > 上次运行时间 来判断“新” LAST_RUN=$(cat /root/unet-cartoon-app/.last_run_time 2>/dev/null || echo "1970-01-01") find "$INPUT_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.webp" \) -newermt "$LAST_RUN" | while read -r img; do echo "[$TIMESTAMP] 发现新图片:$(basename "$img")" >> "$LOG_FILE" # 构造输出文件名:原名_卡通.png BASENAME=$(basename "$img" | sed 's/\.[^.]*$//') EXT=$(basename "$img" | grep -o '\.[^.]*$' | tr '[:lower:]' '[:upper:]') OUTPUT_NAME="${OUTPUT_DIR}/${BASENAME}_cartoon.png" # 执行转换(使用推荐参数:1024分辨率、强度0.8、PNG无损) if python /root/unet-cartoon-app/app.py \ --input "$img" \ --output "$OUTPUT_NAME" \ --resolution 1024 \ --strength 0.8 \ --format png 2>> "$LOG_FILE"; then echo "[$TIMESTAMP] 成功处理:$(basename "$img") → $(basename "$OUTPUT_NAME")" >> "$LOG_FILE" # 可选:处理完移动原图到 processed/ 目录,避免重复处理 mkdir -p "$INPUT_DIR/processed" mv "$img" "$INPUT_DIR/processed/" else echo "[$TIMESTAMP] ❌ 处理失败:$(basename "$img")" >> "$LOG_FILE" fi done # 更新最后运行时间戳 date '+%Y-%m-%d %H:%M:%S' > /root/unet-cartoon-app/.last_run_time echo "[$TIMESTAMP] 扫描结束,共处理 $(wc -l < "$LOG_FILE" 2>/dev/null || echo 0) 行日志" >> "$LOG_FILE"
使用说明:
  1. 将脚本保存为/root/scripts/auto-process.sh
  2. 赋予执行权限:chmod +x /root/scripts/auto-process.sh
  3. 手动测试一次:/root/scripts/auto-process.sh,检查logs/outputs/是否生成结果;
  4. 设置定时任务(编辑crontab):
    # 每30分钟执行一次 */30 * * * * /root/scripts/auto-process.sh
防坑提示:
  • 脚本自带防重机制(通过.last_run_time记录+-newermt筛选),不会重复处理同一张图;
  • 自动创建缺失目录,避免因路径不存在导致失败;
  • ❌ 切勿将input/目录设为WebUI上传目录(如gradio_cached_examples),否则可能冲突;建议单独建/root/unet-cartoon-app/input作为专用输入通道。

3.2 场景二:每日凌晨2点清理过期输出(磁盘守护者)

适用于:长期运行的服务,防止outputs/目录膨胀占满硬盘。

脚本内容(保存为/root/scripts/clean-outputs.sh
#!/bin/bash # ================================ # unet人像卡通化 - 自动清理过期输出 # 功能:删除 outputs/ 下超过24小时的文件,保留最近一天结果 # ================================ OUTPUT_DIR="/root/unet-cartoon-app/outputs" LOG_FILE="/root/unet-cartoon-app/logs/clean-outputs.log" TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "[$TIMESTAMP] 开始清理 outputs/ 目录..." >> "$LOG_FILE" # 查找并删除24小时前的文件(不删目录) find "$OUTPUT_DIR" -type f -mtime +1 -delete 2>> "$LOG_FILE" # 统计清理结果 COUNT=$(find "$OUTPUT_DIR" -type f -mtime +1 2>/dev/null | wc -l) if [ "$COUNT" -eq 0 ]; then echo "[$TIMESTAMP] 无需清理:所有文件均在24小时内生成" >> "$LOG_FILE" else echo "[$TIMESTAMP] 🧹 已清理 $COUNT 个过期文件" >> "$LOG_FILE" fi # 可选:检查剩余空间,低于10%时发警告(需安装mailutils或替换为微信通知) # df -h "$OUTPUT_DIR" | awk 'NR==2 {if($5+0 > 90) print "警告:磁盘使用率"$5}' >> "$LOG_FILE"
使用说明:
  • 同样赋予权限:chmod +x /root/scripts/clean-outputs.sh
  • 加入crontab:
    # 每天凌晨2点执行 0 2 * * * /root/scripts/clean-outputs.sh

3.3 场景三:每周一上午9点生成处理报告(管理可视化)

适用于:向团队同步AI使用情况,体现自动化价值。

脚本内容(保存为/root/scripts/weekly-report.sh
#!/bin/bash # ================================ # unet人像卡通化 - 周报生成脚本 # 功能:统计上周 outputs/ 目录生成文件数、总大小、平均处理时长(需配合日志) # 输出为纯文本报告,可邮件/微信发送 # ================================ OUTPUT_DIR="/root/unet-cartoon-app/outputs" LOG_DIR="/root/unet-cartoon-app/logs" REPORT_FILE="/root/unet-cartoon-app/reports/weekly_$(date '+%Y%m%d').txt" TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') # 计算上周一到本周日的时间范围 START_DATE=$(date -d 'last Monday' '+%Y-%m-%d') END_DATE=$(date -d 'next Sunday' '+%Y-%m-%d') echo "=== unet人像卡通化服务周报 ===" > "$REPORT_FILE" echo "统计周期:$START_DATE 至 $END_DATE" >> "$REPORT_FILE" echo "生成时间:$(date)" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 1. 统计文件数量 COUNT=$(find "$OUTPUT_DIR" -type f -newermt "$START_DATE" ! -newermt "$END_DATE" 2>/dev/null | wc -l) echo " 本周共生成卡通图片:$COUNT 张" >> "$REPORT_FILE" # 2. 统计总大小(MB) SIZE_MB=$(find "$OUTPUT_DIR" -type f -newermt "$START_DATE" ! -newermt "$END_DATE" -exec stat -c "%s" {} \; 2>/dev/null | awk '{sum += $1} END {printf "%.1f", sum/1024/1024}') echo "📦 输出总大小:${SIZE_MB:-0} MB" >> "$REPORT_FILE" # 3. 从日志提取平均处理时长(需日志含耗时信息,如“耗时3.2s”) AVG_TIME=$(grep -oE '耗时[0-9.]+s' "$LOG_DIR/auto-process.log" 2>/dev/null | grep -oE '[0-9.]+' | awk '{sum += $1; count++} END {if(count>0) printf "%.1f", sum/count}' || echo "N/A") echo "⏱ 平均单图处理耗时:${AVG_TIME}s" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" echo " 提示:本报告由自动化脚本生成,无需人工干预。" >> "$REPORT_FILE" # 可选:发送到邮箱(取消下面两行注释,并配置mail) # SUBJECT="【AI周报】unet卡通化服务 $START_DATE-$END_DATE" # mail -s "$SUBJECT" your@email.com < "$REPORT_FILE"
使用说明:
  • 加入crontab:
    # 每周一上午9点执行 0 9 * * 1 /root/scripts/weekly-report.sh

4. 进阶技巧:让定时任务更可靠、更聪明

上面三个脚本已覆盖90%日常需求。但真实生产环境还需一点“小心机”:

4.1 服务健康检查:定时任务前先确认WebUI活着

在每个脚本开头加入:

# 检查WebUI是否响应(端口7860) if ! timeout 5 bash -c ":</dev/tcp/127.0.0.1/7860" 2>/dev/null; then echo "[$(date)] ❌ WebUI未运行,尝试重启..." >> "$LOG_FILE" /bin/bash /root/run.sh 2>&1 >> "$LOG_FILE" & sleep 15 # 等待启动 fi

4.2 错误自动重试:网络抖动或显存不足时多试两次

将核心命令包裹为:

for i in {1..3}; do if python app.py --input "$img" --output "$out" --resolution 1024; then break elif [ $i -eq 3 ]; then echo "❌ 重试3次仍失败:$(basename "$img")" >> "$LOG_FILE" else echo " 第$i次失败,3秒后重试..." >> "$LOG_FILE" sleep 3 fi done

4.3 日志轮转:避免单个log文件无限增长

logrotate或简单加一行:

# 在脚本末尾添加(按月分割日志) if [ $(date '+%d') -eq 01 ]; then mv "$LOG_FILE" "${LOG_FILE}_$(date -d 'last month' '+%Y%m')_bak" fi

5. 总结:定时不是目的,自动化才是常态

你现在已经掌握了:

  • 如何绕过WebUI,直连unet卡通化服务的命令行接口;
  • 三个开箱即用的定时脚本:自动处理、自动清理、自动报告;
  • 三条防坑经验:防重复、防中断、防磁盘爆满;
  • 三项进阶能力:服务自检、失败重试、日志管理。

这些脚本加起来不到200行,却能让科哥构建的这个强大工具,真正从“演示项目”蜕变为“生产级AI服务”。

记住:最好的自动化,是让你彻底忘记它的存在
当某天你发现,相册里新照片自动变卡通、日报准时出现在钉钉、磁盘空间永远充裕——你就知道,这台服务器,已经学会自己工作了。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 19:49:31

Z-Image-ComfyUI部署卡顿?8 NFEs高效率推理优化教程

Z-Image-ComfyUI部署卡顿&#xff1f;8 NFEs高效率推理优化教程 1. 为什么Z-Image-ComfyUI会卡顿——不是模型不行&#xff0c;是没用对方法 你刚拉取Z-Image-ComfyUI镜像&#xff0c;启动ComfyUI界面&#xff0c;加载完模型&#xff0c;点下“Queue Prompt”&#xff0c;结果…

作者头像 李华
网站建设 2026/4/18 1:14:09

零基础玩转3D人脸重建:用一张照片生成3D模型全流程

零基础玩转3D人脸重建&#xff1a;用一张照片生成3D模型全流程 你有没有想过&#xff0c;只用手机拍的一张自拍照&#xff0c;就能变成可在3D软件里自由旋转、编辑、甚至导入游戏引擎的数字人头像&#xff1f;不需要建模功底&#xff0c;不用学Maya或Blender&#xff0c;更不用…

作者头像 李华
网站建设 2026/4/28 21:48:16

Z-Image Turbo多风格作品集:写实/动漫/3D渲染/水墨风生成效果

Z-Image Turbo多风格作品集&#xff1a;写实/动漫/3D渲染/水墨风生成效果 1. 极速AI画板&#xff1a;Z-Image Turbo初体验 想象一下&#xff0c;你只需要输入几个简单的英文单词&#xff0c;就能在几秒钟内看到高清的写实照片、动漫角色、3D渲染场景或是传统水墨画。这正是Z-…

作者头像 李华
网站建设 2026/4/18 0:10:51

AcousticSense AI多场景落地:从古典乐鉴赏到嘻哈采样溯源的跨域解析

AcousticSense AI多场景落地&#xff1a;从古典乐鉴赏到嘻哈采样溯源的跨域解析 1. 视觉化音频流派解析工作站 AcousticSense AI是一套创新的音频分类解决方案&#xff0c;它将数字信号处理技术与计算机视觉技术巧妙结合。这个系统的核心思想是"让AI看见音乐"——通…

作者头像 李华
网站建设 2026/4/23 14:04:24

一键部署GTE中文向量模型:语义搜索与推荐系统搭建指南

一键部署GTE中文向量模型&#xff1a;语义搜索与推荐系统搭建指南 你是否还在为中文文本检索不准、推荐结果千篇一律而发愁&#xff1f;是否每次想用向量模型都要折腾环境、下载权重、调试CUDA版本&#xff0c;最后卡在“ImportError: cannot import name ‘xxx’”上一整天&a…

作者头像 李华
网站建设 2026/4/18 22:19:04

5个维度解析ok-wuthering-waves:让鸣潮体验升级的黑科技

5个维度解析ok-wuthering-waves&#xff1a;让鸣潮体验升级的黑科技 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 一、价…

作者头像 李华