用du配合shell脚本实现轻量部署产物大小监控,核心是定期采样、阈值判断与告警;监控固定目录如/opt/app/releases/,支持单版本或总量统计,自动清理旧版并集成cron与日志。

用 du 配合 Shell 脚本做部署产物大小监控,核心是定期采样、设定阈值、及时告警,不依赖外部工具,轻量可靠。
明确监控目标和关键路径
自动化部署产物通常集中在固定目录,比如 /opt/app/releases/、/var/www/html/ 或 CI/CD 工作区下的 dist/、build/。先确认实际路径,再决定是监控单个目录(如最新版本),还是累加所有历史版本总大小。
- 只监最新版:用
ls -t | head -n1找最新子目录,再du -sh计算 - 监控总占用:直接
du -sh /path/to/releases/(含所有子目录) - 排除临时文件:加
--exclude="*.tmp"或--exclude=".git"避免干扰
编写带阈值判断的监控脚本
以下是一个可直接使用的精简脚本(保存为 check-deploy-size.sh):
#!/bin/bash
TARGET_DIR="/opt/app/releases"
THRESHOLD_MB=5000 # 单位 MB,即 5GB
CURRENT_SIZE_MB=$(du -sm "$TARGET_DIR" 2>/dev/null | cut -f1)
<p>if [ -z "$CURRENT_SIZE_MB" ]; then
echo "ERROR: cannot read size of $TARGET_DIR" >&2
exit 1
fi</p><p>if [ "$CURRENT_SIZE_MB" -gt "$THRESHOLD_MB" ]; then
echo "ALERT: $TARGET_DIR size ($CURRENT_SIZE_MB MB) exceeds threshold ($THRESHOLD_MB MB)"</p><h1>可在此加入清理逻辑,例如保留最近3个版本:</h1><h1>ls -t "$TARGET_DIR" | tail -n +4 | xargs -r rm -rf</h1><h1>或发邮件/调用 webhook 告警</h1><p>logger "Deploy size alert: ${CURRENT_SIZE_MB}MB > ${THRESHOLD_MB}MB"
exit 2
else
echo "OK: $TARGET_DIR size = ${CURRENT_SIZE_MB} MB"
fi
</p>
-
du -sm输出以 MB 为单位的整数,便于数值比较 -
2>/dev/null屏蔽权限错误等噪音 -
logger写入系统日志,方便用journalctl -t check-deploy-size追踪
接入定时与告警机制
将脚本纳入 cron,每30分钟检查一次:
# 编辑 crontab(建议用部署用户执行) $ crontab -e */30 * * * * /path/to/check-deploy-size.sh >> /var/log/deploy-size.log 2>&1
- 输出追加到日志,便于排查;避免无节制邮件轰炸
- 若需邮件通知,可在脚本末尾加:
mail -s "Deploy Size Alert" admin@example.com - 更现代的做法:用
curl推送 JSON 到企业微信/钉钉机器人
补充建议:配合清理策略防被动溢出
光告警不够,最好自动清理旧版本。在脚本中加入安全清理逻辑(推荐只清理非当前正在运行的版本):
- 通过软链接识别当前生效版本:
CURRENT=$(readlink -f /opt/app/current) - 列出所有 release 目录,排除
$CURRENT和最近 N 个时间戳命名的目录 - 用
find /opt/app/releases -mindepth 1 -maxdepth 1 -type d ! -newermt '7 days ago' -not -path "$CURRENT" -exec rm -rf {} + - 清理前加
echo预演,确认无误再删











