温馨提示×

如何自动化CentOS清理

小樊
44
2026-08-30 06:30:02
栏目: 智能运维

下面给你一套在 CentOS(7/8/Stream)上自动化清理的完整思路,从手动清理 → 定时自动化 → 可选企业级方案,你可以按需要选用。


一、先搞清楚的几个清理点

CentOS 常见需要清理的内容:

清理项 说明
系统日志 /var/log
YUM/DNF 缓存 /var/cache/yum
旧内核 升级后残留
临时文件 /tmp
journal 日志 systemd-journal
Docker(如安装) 镜像 / 容器 / 卷

二、手动清理(先验证再自动化)

1️⃣ 清理 YUM / DNF 缓存

yum clean all
# CentOS 8+
dnf clean all

2️⃣ 删除旧内核(⚠️ 保留当前在用)

# 查看当前内核
uname -r

# 列出已安装内核
rpm -qa kernel

# 删除指定旧内核
yum remove kernel-3.10.0-xxx

✅ 推荐方式(CentOS 7):

package-cleanup --oldkernels --count=2

3️⃣ 清理 systemd journal 日志

journalctl --vacuum-time=7d
# 或
journalctl --vacuum-size=500M

4️⃣ 清理 /tmp

find /tmp -type f -atime +7 -delete

⚠️ 生产环境慎用 -delete


5️⃣ 清理日志

find /var/log -type f -name "*.log" -mtime +30 -exec truncate -s 0 {} \;

或只删除轮转后的日志:

find /var/log -name "*.log-*" -mtime +30 -delete

三、自动化清理(推荐 ✅)

✅ 方案一:Cron 定时任务(最常用)

1️⃣ 编写清理脚本

vi /usr/local/bin/centos_cleanup.sh
#!/bin/bash
# CentOS 自动清理脚本

LOG=/var/log/centos_cleanup.log
echo "=== $(date) ===" >> $LOG

# YUM 缓存
yum clean all >> $LOG 2>&1

# 保留最近 2 个内核
if command -v package-cleanup &>/dev/null; then
  package-cleanup --oldkernels --count=2 -y >> $LOG 2>&1
fi

# Journal 日志
journalctl --vacuum-time=7d >> $LOG 2>&1

# /tmp 老文件
find /tmp -type f -atime +7 -delete >> $LOG 2>&1

# 日志截断
find /var/log -type f -name "*.log" -mtime +30 -exec truncate -s 0 {} \; >> $LOG 2>&1

echo "Cleanup done" >> $LOG
chmod +x /usr/local/bin/centos_cleanup.sh

2️⃣ 添加到 cron

crontab -e

每周日凌晨 3 点执行:

0 3 * * 0 /usr/local/bin/centos_cleanup.sh

✅ 方案二:systemd timer(更像“新 CentOS 风格”)

vi /etc/systemd/system/centos-cleanup.service
[Unit]
Description=CentOS Cleanup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/centos_cleanup.sh
vi /etc/systemd/system/centos-cleanup.timer
[Unit]
Description=Run CentOS cleanup weekly

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

启用:

systemctl daemon-reload
systemctl enable --now centos-cleanup.timer

查看:

systemctl list-timers

四、Docker 环境的自动化清理(如适用)

docker system prune -f

定制:

docker system prune --volumes --filter "until=72h" -f

可加入 cron 或脚本中。


五、企业级最佳实践(强烈建议)

不要直接删除日志
✅ 使用 logrotate 管理日志
✅ 清理前先测试
✅ 保留至少 1–2 个旧内核
✅ 磁盘监控(防止清理前已经爆盘)

监控示例:

df -h
du -sh /var/log/*

六、我可以直接帮你定制

如果你愿意,可以告诉我:

  1. CentOS 版本(7 / 8 / Stream)
  2. 是否安装 Docker / K8s
  3. 磁盘爆满原因(日志 / 缓存 / 内核)
  4. 是否生产环境(决定清理策略保守程度)

我可以直接给你 一份生产可用、可直接部署的清理脚本

0