centos

如何判断centos cleanup是否需要运行

小樊
39
2025-12-11 16:40:41
栏目: 智能运维

判断 CentOS Cleanup 是否需要运行的实用流程

一 快速判断清单

二 关键指标与阈值示例

指标 观察方式 建议阈值 建议动作
根分区可用空间 df -h < 10%–20% 立即清理日志、缓存、旧内核等
/var/log 体积 du -h --max-depth=1 /var/log 明显偏大(如 > 1–5GB 调整 logrotate;清理 journal;压缩归档旧日志
YUM 缓存 du -sh /var/cache/yum 或 yum repolist 占用数百 MB 以上 执行 yum clean all
旧内核数量 rpm -q kernel 或 package-cleanup --oldkernels --count=2 > 2–3 仅保留最近 2 个内核
systemd 日志 journalctl --disk-usage 接近或超过 500MB–1GB journalctl --vacuum-time / --vacuum-size
Docker 资源 docker system df Images/Volumes 占用高 docker system prune(-a/-f 视情况)
上述阈值为运维中常用的经验值,可按业务容忍度微调。

三 一键判断脚本

#!/usr/bin/env bash
set -Eeuo pipefail

THRESHOLD_PERC=20
JOURNAL_MAX_SIZE="500M"
KERNEL_KEEP=2

need_cleanup=false

# 1) 磁盘空间
while IFS= read -r line; do
  usage=$(echo "$line" | awk '{print $5}' | tr -d '%')
  mount=$(echo "$line" | awk '{print $6}')
  if [[ $usage -ge $THRESHOLD_PERC ]]; then
    echo "磁盘告警: $mount 已用 ${usage}% (阈值 ${THRESHOLD_PERC}%)"
    need_cleanup=true
  fi
done < <(df -h | awk 'NR>1 && $NF ~ /^\/$|\/var$/ {print}')

# 2) /var/log 体积
log_size=$(du -sh /var/log 2>/dev/null | cut -f1)
echo "/var/log 体积: $log_size"
[[ $(echo "$log_size" | sed 's/G//;s/M//') -gt 1024 ]] && need_cleanup=true  # >1G 简单判定

# 3) YUM 缓存
cache_size=$(du -sh /var/cache/yum 2>/dev/null | cut -f1)
echo "YUM 缓存: $cache_size"
[[ -n "$cache_size" ]] && need_cleanup=true

# 4) 旧内核数量
if command -v package-cleanup >/dev/null 2>&1; then
  old_kernels=$(package-cleanup --oldkernels --count=$((KERNEL_KEEP+1)) 2>/dev/null | wc -l)
  if [[ $old_kernels -gt 0 ]]; then
    echo "旧内核数量超过 $KERNEL_KEEP 个"
    need_cleanup=true
  fi
fi

# 5) systemd 日志
if command -v journalctl >/dev/null 2>&1; then
  journal_usage=$(journalctl --disk-usage | sed -n 's/.*\([0-9.]\+[A-Z]\).*/\1/p')
  echo "journal 日志占用: ${journal_usage:-未知}"
  need_cleanup=true
fi

# 6) Docker
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
  docker_df=$(docker system df --format '{{.TotalCount}} {{.Size}}' | head -n1)
  echo "Docker 资源: $docker_df"
  need_cleanup=true
fi

if $need_cleanup; then
  echo "结论: 建议立即运行 cleanup(磁盘/日志/缓存/旧内核等需要维护)"
  exit 0
else
  echo "结论: 当前无需紧急 cleanup"
  exit 1
fi

说明:阈值可按需调整;该脚本仅做“是否需要”的判定,不执行实际删除操作。

四 需要运行时的安全清理顺序

五 何时不必运行与后续预防

0
看了该问题的人还看了