禅道开源版空间无限膨胀?手把手写生产级自动清理脚本,彻底解决磁盘占满问题

张开发
2026/5/26 14:23:33 15 分钟阅读
禅道开源版空间无限膨胀?手把手写生产级自动清理脚本,彻底解决磁盘占满问题
前言禅道开源版备份不清理磁盘早晚被撑爆本文提供一套生产级自动清理方案只删 7 天前的旧备份不影响任何生产数据彻底根治备份膨胀问题运维小白也能直接复用。作为运维相信用禅道开源版的小伙伴都踩过同一个致命坑禅道默认每天自动全量备份开源版居然阉割了「自动清理旧备份」核心功能该功能仅企业版专属时间一长/opt/zbox/app/zentao/tmp/backup/目录疯狂膨胀从几G涨到十几G、几十G最终直接占满磁盘导致禅道服务器崩溃欲哭无泪。本文分享一套生产级可用的禅道开源版自动清理脚本定时任务彻底解决备份无限膨胀问题全程零风险、不影响业务数据可直接复用。一、问题根源禅道开源版的「备份陷阱」禅道的备份机制本身设计简单但开源版的阉割操作直接埋下了磁盘爆炸的隐患默认全量备份每天自动生成包含「数据库备份*.sql.php 附件备份*.file目录 代码备份*.code目录」的完整备份永久保留不清理默认不会自动删除任何旧备份所有备份永久存储在服务器开源版无清理功能后台完全没有「保留备份天数/自动清理旧备份」的可视化配置仅企业版支持体积爆炸式增长对于附件多的团队单天备份体积轻松突破1G半个月就能占满15G磁盘几个月直接上百G最终磁盘爆满服务宕机我在生产环境部署时就遇到了备份目录从0涨到17G的情况第一次手动清理只删了数据库备份仅释放1G空间治标不治本这才下定决心做一套彻底的解决方案。二、踩坑实录从「只清1G」到「生产级脚本」的避坑之路在最终脚本落地前我踩了4个运维典型的坑给大家提前避坑坑1漏删核心备份只清了1G空间第一次手动清理时只写了删除*.sql.php数据库备份的命令完全没碰真正占空间的*.file附件目录、*.code代码目录结果17G的备份只清了1G没过几天磁盘又满了。坑2Cron定时任务的「隐形杀手」直接把命令写进crontab结果手动执行正常定时任务静默失败环境变量缺失cron默认PATH不包含/usr/local/bin导致find、du等命令找不到权限问题日志写/var/log/普通用户无权限日志静默丢失无法排查执行逻辑风险用;连接命令前一个命令失败后续命令仍执行导致清理不完整坑3Find报错「No such file or directory」脚本执行时find频繁报目录不存在的错误其实是先删了目录后续find遍历找不到属于正常提示但影响日志可读性和问题排查。坑4日志无时间戳分不清哪天清理的最初的脚本只记录备份大小没有执行时间无法追溯每条日志对应哪一天的清理出问题难以排查。三、最终生产级自动清理脚本v1.2零风险可直接复用针对以上所有坑优化出一套生产级可用的脚本核心原则只删7天前的旧备份绝对不碰真实业务数据保留足够恢复周期。脚本完整代码#!/bin/bash# # 禅道开源版 自动清理旧备份 生产级脚本# 功能每天自动删除7天前的旧备份仅操作备份目录不碰真实数据# 适配禅道一键安装包默认路径无需修改# 版本v1.2新增日志时间戳可追溯执行日期# # 1. 显式声明环境变量彻底解决cron找不到命令的问题PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# 2. 定义备份目录禅道一键安装包默认路径无需修改BACKUP_DIR/opt/zbox/app/zentao/tmp/backup/# 3. 进入备份目录失败则直接退出杜绝误操作其他目录cd${BACKUP_DIR}||exit1# 4. 核心清理逻辑 连接任一环节失败则终止避免不完整清理# 4.1 删除7天前的数据库备份*.sql.php2/dev/null 屏蔽正常提示find.-typef-name*.sql.php-mtime7-delete2/dev/null\# 4.2 删除7天前的附件备份*.file目录真正占空间的核心find.-typed-name*.file-mtime7-execrm-rf{}\;2/dev/null\# 4.3 删除7天前的代码备份*.code目录find.-typed-name*.code-mtime7-execrm-rf{}\;2/dev/null\# 4.4 清理删除后产生的空目录find.-typed-empty-delete2/dev/null# 5. 记录清理日志带时间戳写入/root目录权限100%可用方便排查echo$(date%Y-%m-%d %H:%M:%S)-$(du-sh${BACKUP_DIR})/root/zentao_backup.log21脚本核心优化点解决所有坑优化点作用显式声明PATH彻底解决cron环境变量缺失找不到find/du命令的问题路径校验失败退出cd 目录连接命令任一环节失败后续命令不再执行避免不完整清理精准匹配备份类型同时清理*.sql.php/*.file/*.code彻底释放所有冗余空间2/dev/null屏蔽提示屏蔽find「目录不存在」的正常提示日志更干净日志写入/root避免/var/log/权限问题确保日志100%可写方便排查日志带时间戳每条记录标注执行时间可精准追溯解决「分不清哪天清理」的问题保留7天备份-mtime 7仅删除7天前的旧备份保留最近7天完整备份符合官方最佳实践可重复执行仅针对过期备份生效重复执行不会误删新备份100%安全四、脚本部署全流程零门槛一步步跟着做步骤1创建脚本文件vi/opt/zbox/clean_zentao_backup.sh将上面的完整脚本复制进去保存退出ESC→:wq→ 回车。步骤2给脚本添加执行权限chmodx /opt/zbox/clean_zentao_backup.sh步骤3手动测试脚本验证安全、有效# 执行脚本/opt/zbox/clean_zentao_backup.sh说明首次执行时find可能会报少量「No such file or directory」属于正常现象已通过2/dev/null屏蔽大部分是因为先删除了目录后续遍历找不到不影响最终清理结果。步骤4验证脚本是否成功无需等待定时任务直接手动验证两步就能确认查看清理日志cat/root/zentao_backup.log成功标志日志中会显示带时间戳的备份目录大小如2026-04-10 23:31:23 - 15G空间成功释放。手动核对备份目录大小双重验证du-sh/opt/zbox/app/zentao/tmp/backup/大小和日志一致说明清理完全生效。步骤5重复执行验证可选100%安全你可以随时重复执行脚本完全不会有任何风险# 再次执行脚本验证无误删/opt/zbox/clean_zentao_backup.sh# 再次查看日志确认备份大小无变化无7天前的旧备份不会删除任何内容cat/root/zentao_backup.log安全原理脚本的核心过滤条件是-mtime 7只删除7天前的旧备份重复执行时find找不到符合条件的旧文件只会空跑不会删除任何有用的新备份更不会碰禅道的真实业务数据。步骤6添加定时任务一劳永逸# 编辑定时任务crontab-e# 在文件末尾添加以下内容每天凌晨2点自动执行无人值守02* * * /opt/zbox/clean_zentao_backup.sh# 保存退出定时任务立即生效步骤7验证定时任务# 查看定时任务是否添加成功crontab-l输出0 2 * * * /opt/zbox/clean_zentao_backup.sh即表示成功。五、100%安全承诺绝对不影响业务数据这是大家最关心的问题给大家吃定心丸1. 操作边界绝对安全脚本全程只操作/opt/zbox/app/zentao/tmp/backup/这一个备份目录禅道的真实业务数据项目、任务、缺陷、用户、附件全部存储在/opt/zbox/data/mysql/目录脚本完全不碰、一丝不动真实数据目录绝对不会影响生产数据。2. 备份策略完全合规脚本仅删除7天前的旧备份最近7天的完整备份数据库附件代码全部保留完全符合禅道官方「保留至少7天备份用于故障恢复」的最佳实践就算出现极端故障也有最近7天的备份可以完整恢复数据绝对有兜底。3. 运行状态零影响禅道运行时根本不会读取备份目录的任何文件删除旧备份对禅道服务、业务功能、页面访问零影响脚本执行后禅道所有进程正常运行数据完整无缺。4. 重复执行零风险脚本仅针对「7天前的旧备份」生效重复执行不会删除任何新备份、不会误删数据可随时验证完全安全。六、进阶优化可选进一步释放空间1. 取消「备份附件」从根源减小备份体积禅道后台 → 「系统」→「备份」→ 取消勾选「备份附件」这样每次备份仅备份数据库单天备份体积从1G降到几十MB备份目录永久稳定在几百MB。注意取消附件备份后需通过整机快照或rsync同步保障附件安全避免数据丢失。2. 附件同步到NAS/云存储# 每天凌晨3点同步附件目录到NAS双重保障附件安全03* * *rsync-avz/opt/zbox/app/zentao/www/data/upload/ nas-server:/backup/zentao/upload/3. 磁盘监控告警添加定时任务当备份目录超过10G时发邮件告警提前预警04* * *[$(du-s/opt/zbox/app/zentao/tmp/backup/|awk{print $1})-gt10240000]echo禅道备份目录超过10G请排查|mail-s磁盘告警adminyourdomain.com七、最终总结禅道开源版阉割自动清理备份功能是很多运维的长期痛点本文分享的脚本是我在生产环境踩坑后优化出的生产级可用方案彻底解决备份无限膨胀、磁盘占满的问题全程零风险不影响业务数据可重复执行随时验证日志可追溯问题可排查一劳永逸自动运维无需手动操作完美适配禅道一键安装包无需修改任何配置希望这篇分享能帮到同样踩坑的运维小伙伴彻底解决禅道备份的烦恼如有问题欢迎在评论区留言交流一起优化运维方案~

更多文章