news 2026/4/18 10:36:00

如何实现定时任务?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/18 5:40:38

SDXL-Turbo GPU算力适配:A10显存仅需6GB的实时推理部署方案

SDXL-Turbo GPU算力适配&#xff1a;A10显存仅需6GB的实时推理部署方案 1. 为什么A10显卡能跑SDXL-Turbo&#xff1f;这和传统文生图模型完全不同 你可能已经习惯了用Stable Diffusion XL生成图片时&#xff0c;要等5秒、10秒甚至更久——调整一次提示词&#xff0c;就得盯着…

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

人脸识别OOD模型快速部署:wget一键拉取镜像+docker run启动服务

人脸识别OOD模型快速部署&#xff1a;wget一键拉取镜像docker run启动服务 你是不是也遇到过这样的问题&#xff1a;人脸比对系统在实际使用中&#xff0c;突然对模糊、侧脸、反光、遮挡的图片给出高相似度&#xff1f;结果误判、漏判频发&#xff0c;考勤打卡认不出人&#x…

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

无需GPU!Qwen3-Embedding-0.6B本地CPU部署实测

无需GPU&#xff01;Qwen3-Embedding-0.6B本地CPU部署实测 你是否也遇到过这样的困扰&#xff1a;想用最新一代的嵌入模型做文本检索、语义搜索或聚类分析&#xff0c;却卡在显存不足、GPU租用成本高、或者环境配置复杂这道门槛上&#xff1f; 这次我们不买卡、不租云、不折腾…

作者头像 李华
网站建设 2026/4/18 3:48:05

SiameseUIE镜像免配置:无需root权限即可在受限实例运行UIE模型

SiameseUIE镜像免配置&#xff1a;无需root权限即可在受限实例运行UIE模型 1. 为什么选择SiameseUIE镜像 在受限的云实例环境中部署AI模型常常会遇到各种限制&#xff1a;系统盘空间不足、无法修改PyTorch版本、重启后环境重置等问题。SiameseUIE镜像正是为解决这些痛点而设计…

作者头像 李华
网站建设 2026/4/18 3:46:42

AIME得分超DeepSeek!这款小模型为何这么强?

AIME得分超DeepSeek&#xff01;这款小模型为何这么强&#xff1f; 你有没有想过&#xff0c;一个只有1.5B参数的模型&#xff0c;能在AIME24数学竞赛测试中拿到80.3分——比参数量超它400倍的DeepSeek R1&#xff08;79.8分&#xff09;还要高&#xff1f;这不是营销话术&…

作者头像 李华
网站建设 2026/4/17 11:53:27

VibeVoice网页UI使用全记录,新手少走弯路

VibeVoice网页UI使用全记录&#xff0c;新手少走弯路 你是不是也经历过这样的尴尬&#xff1a;花半天配好环境、下载模型、改参数&#xff0c;终于跑通命令行TTS&#xff0c;结果一输入带角色的对话文本&#xff0c;系统直接报错——“不支持多说话人格式”&#xff1b;或者好…

作者头像 李华