下面给你一套在 CentOS(7/8/Stream)上自动化清理的完整思路,从手动清理 → 定时自动化 → 可选企业级方案,你可以按需要选用。
CentOS 常见需要清理的内容:
| 清理项 | 说明 |
|---|---|
| 系统日志 | /var/log |
| YUM/DNF 缓存 | /var/cache/yum |
| 旧内核 | 升级后残留 |
| 临时文件 | /tmp |
| journal 日志 | systemd-journal |
| Docker(如安装) | 镜像 / 容器 / 卷 |
yum clean all
# CentOS 8+
dnf clean all
# 查看当前内核
uname -r
# 列出已安装内核
rpm -qa kernel
# 删除指定旧内核
yum remove kernel-3.10.0-xxx
✅ 推荐方式(CentOS 7):
package-cleanup --oldkernels --count=2
journalctl --vacuum-time=7d
# 或
journalctl --vacuum-size=500M
find /tmp -type f -atime +7 -delete
⚠️ 生产环境慎用 -delete
find /var/log -type f -name "*.log" -mtime +30 -exec truncate -s 0 {} \;
或只删除轮转后的日志:
find /var/log -name "*.log-*" -mtime +30 -delete
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
crontab -e
每周日凌晨 3 点执行:
0 3 * * 0 /usr/local/bin/centos_cleanup.sh
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 system prune -f
定制:
docker system prune --volumes --filter "until=72h" -f
可加入 cron 或脚本中。
✅ 不要直接删除日志
✅ 使用 logrotate 管理日志
✅ 清理前先测试
✅ 保留至少 1–2 个旧内核
✅ 磁盘监控(防止清理前已经爆盘)
监控示例:
df -h
du -sh /var/log/*
如果你愿意,可以告诉我:
我可以直接给你 一份生产可用、可直接部署的清理脚本。