Wan2.2-T2V-A5B系统清理脚本编写:自动化管理生成缓存与日志

发布时间:2026/5/27 16:11:18

Wan2.2-T2V-A5B系统清理脚本编写:自动化管理生成缓存与日志 Wan2.2-T2V-A5B系统清理脚本编写自动化管理生成缓存与日志你是不是也遇到过这种情况服务器跑着跑着突然就提示“磁盘空间不足”了。特别是像Wan2.2-T2V-A5B这种视频生成服务跑得时间一长生成的临时视频文件、堆积如山的日志还有Docker留下的各种缓存分分钟就能把硬盘塞满。手动清理吧太麻烦还容易误删重要文件不清理吧服务随时可能因为磁盘写满而崩溃。今天我就来跟你聊聊怎么用脚本解决这个烦心事。咱们不搞复杂的架构就写几个简单实用的Shell和Python脚本让电脑自己学会“打扫卫生”实现真正的运维自动化。1. 为什么需要自动化清理在开始写代码之前咱们先得搞清楚到底要清理什么以及为什么要清理。Wan2.2-T2V-A5B这类服务在长期运行后主要会产生几类“垃圾”临时视频文件每次生成视频时产生的中间文件或缓存任务完成后往往就没人管了。应用日志服务运行、错误、访问日志日积月累体积非常可观。Docker相关垃圾停止的容器、无用的镜像、构建缓存这些都会占用大量空间。其他缓存模型缓存、依赖包缓存等。手动管理这些文件效率低下且容易出错。一个自动化的清理脚本能帮你保障服务稳定避免因磁盘满导致服务不可用。释放存储空间定期清理让硬盘保持“清爽”。降低运维成本把运维人员从重复劳动中解放出来。规范文件管理通过脚本实现统一的清理策略。接下来我们就从最简单的开始一步步构建一个实用的清理体系。2. 环境准备与思路梳理写脚本不需要特别复杂的环境你只需要一台安装了Wan2.2-T2V-A5B服务的Linux服务器或Windows下的WSL以及最基础的文本编辑器和命令行知识就行。我们的清理工作主要围绕几个核心目标展开我会用一个表格来清晰地展示我们的“作战计划”清理目标典型路径示例清理策略潜在风险旧临时视频文件/opt/wan2.2-t2v/outputs/temp_*.mp4删除超过N天如7天的文件误删正在生成中的文件过期应用日志/var/log/wan2.2-t2v/app*.log压缩超过M天如30天的日志并删除更旧的压缩包需保留足够日志用于排查问题Docker系统垃圾无固定路径定期清理无用镜像、容器、卷和构建缓存谨慎操作避免清理正在使用的资源磁盘空间监控监控指定分区如/或/data使用率超过阈值如80%时发送告警告警通道需可靠有了这个蓝图我们就可以分模块动手了。记住一个原则先备份再测试最后上线。尤其是删除操作一定要小心。3. 编写核心清理模块Shell脚本篇Shell脚本非常适合做这种文件系统操作。我们把它拆成几个功能单一的函数这样既清晰又好维护。3.1 清理旧的临时视频文件这是最直接的空间回收方式。我们使用find命令它是完成这个任务的瑞士军刀。#!/bin/bash # 定义清理配置 TEMP_DIR/opt/wan2.2-t2v/outputs # 临时文件目录 FILE_PATTERNtemp_*.mp4 # 要清理的文件模式 DAYS_TO_KEEP7 # 保留最近多少天的文件 LOG_FILE/var/log/cleanup.log # 本脚本的运行日志 # 函数清理旧临时文件 clean_old_temp_files() { echo $(date) - 开始清理临时视频文件... $LOG_FILE if [ ! -d $TEMP_DIR ]; then echo $(date) - 错误目录 $TEMP_DIR 不存在。 $LOG_FILE return 1 fi # 使用find命令查找并删除 # -type f: 只找文件 # -name: 匹配文件名模式 # -mtime $DAYS_TO_KEEP: 修改时间在$DAYS_TO_KEEP天之前 # -exec rm -f {} \;: 对找到的每个文件执行rm -f命令 find $TEMP_DIR -type f -name $FILE_PATTERN -mtime $DAYS_TO_KEEP -exec rm -f {} \; # 统计删除了多少文件可选需要调整命令 # deleted_count$(find $TEMP_DIR -type f -name $FILE_PATTERN -mtime $DAYS_TO_KEEP -printf . | wc -c) # echo $(date) - 清理完成删除了 $deleted_count 个文件。 $LOG_FILE echo $(date) - 临时文件清理完成。 $LOG_FILE }关键点解释-mtime 7表示查找7*24小时之前修改过的文件。7是大于7天7是正好第7天-7是小于7天。-exec ... \;find命令对每个找到的文件执行后续命令。{}会被替换为文件名\;是命令结束符。安全建议初次运行时可以把rm -f替换为ls -la或echo先看看会找到哪些文件确认无误后再执行删除。3.2 压缩与轮转应用日志日志不能简单删除我们通常需要压缩旧日志以节省空间并删除更久远的日志压缩包。# 函数压缩与清理旧日志 manage_application_logs() { echo $(date) - 开始管理应用日志... $LOG_FILE LOG_DIR/var/log/wan2.2-t2v COMPRESS_DAYS30 # 压缩30天前的日志 DELETE_DAYS90 # 删除90天前的压缩包 if [ ! -d $LOG_DIR ]; then echo $(date) - 警告日志目录 $LOG_DIR 不存在。 $LOG_FILE return fi # 1. 压缩旧日志文件例如.log文件 # 找到30天前的.log文件并用gzip压缩 find $LOG_DIR -type f -name *.log -mtime $COMPRESS_DAYS | while read logfile; do # 如果对应的.gz文件不存在则进行压缩 if [ ! -f ${logfile}.gz ]; then gzip -c $logfile ${logfile}.gz rm -f $logfile echo $(date) - 已压缩: $logfile $LOG_FILE fi done # 2. 删除过旧的日志压缩包 find $LOG_DIR -type f -name *.gz -mtime $DELETE_DAYS -exec rm -f {} \; echo $(date) - 应用日志管理完成。 $LOG_FILE }3.3 清理Docker系统资源Docker用久了会产生很多垃圾docker system prune命令可以一键清理但为了更精细的控制我们可以分步骤来。# 函数清理Docker无用资源 clean_docker_system() { echo $(date) - 开始清理Docker系统... $LOG_FILE # 谨慎操作以下命令会删除停止的容器、未被任何容器使用的卷、未被任何镜像引用的镜像、构建缓存。 # 在生产环境执行前请务必确认。 # 只删除未被使用的镜像悬空镜像dangling images docker image prune -f # 删除所有未被使用的资源停止的容器、悬空镜像、网络、构建缓存-a会删除所有未被容器使用的镜像不仅仅是悬空镜像 # docker system prune -af --volumes # 更安全的选择交互式清理或分开清理 # 删除停止的容器 # docker container prune -f # 删除未被使用的卷 # docker volume prune -f # 删除未被使用的网络 # docker network prune -f echo $(date) - Docker系统清理完成。 $LOG_FILE }重要警告docker system prune -af --volumes这个命令威力很大它会删除所有停止的容器、所有没有被容器使用的镜像不仅仅是悬空镜像、所有未被使用的卷和网络。在生产环境使用前请务必在测试环境验证并确保你了解其后果。建议从更保守的命令开始。4. 添加监控与告警功能Python脚本篇单纯的清理有时是滞后的我们需要一个“哨兵”在磁盘空间紧张时提前告警。Python在数据处理和外部集成上更有优势。4.1 监控磁盘使用率我们来写一个Python脚本检查磁盘使用情况。#!/usr/bin/env python3 # -*- coding: utf-8 -*- import shutil import sys import logging from datetime import datetime # 配置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(/var/log/disk_monitor.log), logging.StreamHandler(sys.stdout) ] ) logger logging.getLogger(__name__) def check_disk_usage(path/, threshold80): 检查指定路径的磁盘使用率。 参数: path (str): 要检查的磁盘路径默认为根目录。 threshold (int): 使用率告警阈值百分比默认为80。 返回: tuple: (总空间GB, 已用空间GB, 使用率百分比, 是否超过阈值) try: usage shutil.disk_usage(path) total_gb usage.total / (1024**3) used_gb usage.used / (1024**3) used_percent (usage.used / usage.total) * 100 is_over_threshold used_percent threshold logger.info(f路径: {path}, 总量: {total_gb:.2f}GB, 已用: {used_gb:.2f}GB, 使用率: {used_percent:.1f}%) return total_gb, used_gb, used_percent, is_over_threshold except Exception as e: logger.error(f检查磁盘使用率时出错 ({path}): {e}) return None, None, None, False if __name__ __main__: # 可以监控多个路径 monitor_points [ (/, 85), # 根目录阈值85% (/data, 90), # 数据目录阈值90% (/opt/wan2.2-t2v, 80) # 应用目录阈值80% ] alert_messages [] for path, thresh in monitor_points: total, used, percent, is_over check_disk_usage(path, thresh) if is_over: msg f【告警】路径 {path} 磁盘使用率 {percent:.1f}% 超过阈值 {thresh}% logger.warning(msg) alert_messages.append(msg) # 如果有告警可以在这里触发发送邮件、钉钉、Slack等通知 # send_alert(alert_messages) if alert_messages: print(\n.join(alert_messages)) # 在实际应用中这里应调用告警发送函数 # 例如send_dingtalk_alert(alert_messages)这个脚本会检查指定目录的磁盘空间并在超过阈值时记录警告日志。你可以通过cron定时运行它。4.2 集成告警通知示例邮件光记录日志不够我们需要它主动“喊”人。这里以发送邮件为例。# 接在上面的 disk_monitor.py 脚本中添加以下函数和修改主逻辑 import smtplib from email.mime.text import MIMEText from email.header import Header def send_email_alert(subject, body, to_addrs, smtp_server, smtp_port, from_addr, password): 发送邮件告警。 注意此示例使用明文密码生产环境请使用更安全的方式如环境变量、配置服务器本地发送。 try: message MIMEText(body, plain, utf-8) message[From] Header(f系统监控 {from_addr}, utf-8) message[To] Header(,.join(to_addrs), utf-8) message[Subject] Header(subject, utf-8) server smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 启用TLS加密如果需要 server.login(from_addr, password) server.sendmail(from_addr, to_addrs, message.as_string()) server.quit() logger.info(告警邮件发送成功。) except Exception as e: logger.error(f发送告警邮件失败: {e}) # 修改主逻辑部分 if __name__ __main__: monitor_points [(/, 85), (/data, 90)] alert_messages [] for path, thresh in monitor_points: total, used, percent, is_over check_disk_usage(path, thresh) if is_over: msg f路径 {path} 磁盘使用率 {percent:.1f}% 超过阈值 {thresh}% (总量:{total:.1f}GB, 已用:{used:.1f}GB)。 alert_messages.append(msg) if alert_messages: subject 【紧急】服务器磁盘空间告警 body \n.join(alert_messages) f\n\n触发时间: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)} # 这里是配置信息请替换为你的实际信息 # 强烈建议将密码等敏感信息存储在环境变量中而不是硬编码在脚本里。 # SMTP_SERVER os.getenv(SMTP_SERVER) # SMTP_PASSWORD os.getenv(SMTP_PASSWORD) smtp_config { smtp_server: smtp.your-email-provider.com, smtp_port: 587, from_addr: monitoryourcompany.com, password: your-email-password, # 从环境变量读取更安全 to_addrs: [admin1yourcompany.com, admin2yourcompany.com] } # 发送邮件 send_email_alert(subject, body, **smtp_config) # 你也可以在这里集成其他告警方式如钉钉机器人、企业微信、Slack等 # send_dingtalk_alert(body)安全提醒脚本中的邮箱密码是敏感信息绝对不要直接写在代码里提交到版本库。应该使用环境变量、配置文件设置好权限或密钥管理服务来存储。5. 整合与自动化部署现在我们有了一堆好用的函数和脚本最后一步就是把它们串起来并让系统定时自动执行。5.1 创建主清理脚本我们把所有的Shell清理函数整合到一个主脚本wan_cleanup.sh中。#!/bin/bash # wan_cleanup.sh - Wan2.2-T2V-A5B 系统自动化清理主脚本 LOG_FILE/var/log/wan_cleanup.log exec $LOG_FILE 21 # 将脚本的所有输出重定向到日志文件 echo echo 开始执行系统清理任务: $(date) echo # 1. 清理旧临时视频文件 source ./cleanup_functions.sh # 假设函数写在另一个文件或者直接写在这里 clean_old_temp_files # 2. 管理应用日志 manage_application_logs # 3. 清理Docker系统谨慎 # 根据你的策略决定是否启用以及使用哪种prune命令 # clean_docker_system # 4. 可选运行Python磁盘监控脚本 # /usr/bin/python3 /path/to/disk_monitor.py echo echo 系统清理任务完成: $(date) echo 5.2 使用Cron实现定时任务Linux下的cron是定时任务的绝佳工具。我们来配置它。# 编辑当前用户的cron任务 crontab -e在打开的编辑器中添加类似下面的行# 每天凌晨3点执行完整的清理脚本 0 3 * * * /bin/bash /path/to/your/wan_cleanup.sh # 每30分钟检查一次磁盘空间使用Python脚本 */30 * * * * /usr/bin/python3 /path/to/your/disk_monitor.py # 每周一凌晨2点进行更彻底的Docker清理谨慎 # 0 2 * * 1 /bin/bash /path/to/your/wan_cleanup.sh --deep-cleanCron时间格式解释分钟 小时 日 月 星期 命令0 3 * * *表示每天3:00 AM。*/30 * * * *表示每30分钟。0 2 * * 1表示每周一2:00 AM。5.3 脚本维护与注意事项脚本跑起来不是终点维护好它才能长久省心。日志是关键确保清理脚本和监控脚本都有自己的日志并且定期轮转可以用我们上面写的logrotate逻辑或者系统自带的logrotate服务来管理这些日志。权限要合理清理脚本可能需要root或特定用户权限来删除某些文件。可以通过sudo配置免密执行特定命令或者将脚本放在有足够权限的用户cron中。先测试后上线永远先在测试环境用echo、ls代替rm用--dry-run参数如果命令支持来验证脚本行为。保留必要文件设置合理的保留天数DAYS_TO_KEEP,COMPRESS_DAYS确保不会误删调试中或法律要求保留的文件。处理特殊情况考虑服务正在写入文件时被删除的情况。对于关键临时文件可以尝试在删除前检查文件是否还被进程打开lsof命令或者选择在服务负载低的时候如深夜执行清理。6. 总结整套流程走下来你会发现自动化清理其实并没有想象中那么复杂。核心就是用find命令定位旧文件用cron命令定时触发再用一个简单的Python脚本充当哨兵。从效果上看这么一套组合拳打下来你的Wan2.2-T2V-A5B服务基本上就能告别因为磁盘满而突然“罢工”的尴尬了。运维同学也不用每天提心吊胆地盯着磁盘空间节省出来的时间可以去琢磨点更有价值的事情。我建议你从最迫切的痛点开始比如先搞定临时视频文件的清理把这个脚本跑起来看到效果后再逐步加上日志轮转和磁盘监控。过程中如果遇到问题多看看脚本输出的日志那是最好的调试信息。记住好的运维脚本是迭代出来的而不是一次写完美的。动手试试吧给你的服务器也安排一个“自动保洁员”。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻