定制 CentOS 清理策略
一 策略框架与优先级
- 目标分层:优先保障**/boot**(旧内核)、/var/log(日志)、/var/cache/yum(包缓存)、/tmp 与 /var/tmp(临时文件)的健康度,避免业务中断与磁盘被占满。
- 配置优先级:涉及临时目录清理时,遵循 systemd-tmpfiles 的加载顺序:/usr/lib/tmpfiles.d/.conf → /run/tmpfiles.d/.conf → /etc/tmpfiles.d/*.conf(后者覆盖前者),自定义策略建议放入**/etc/tmpfiles.d/**。
- 变更风险控制:清理前先备份关键配置与数据;对正在运行的业务日志,优先用logrotate轮转与压缩,避免直接删除正在写入的日志文件。
二 关键清理项与推荐阈值
| 清理项 |
推荐阈值或做法 |
命令示例 |
注意事项 |
| YUM/DNF 缓存 |
定期清理全部缓存 |
yum clean all(或 dnf clean all) |
释放空间,不影响已安装软件 |
| 旧内核 |
仅保留最新2个内核 |
package-cleanup --oldkernels --count=2 |
先确认当前运行内核:uname -r |
| systemd 日志 journal |
保留最近7天或上限500MB |
journalctl --vacuum-time=7d;journalctl --vacuum-size=500M |
避免日志无限增长 |
| 传统日志轮转 |
按日轮转、保留4周、启用压缩 |
配置 /etc/logrotate.d/* |
不要手动删除正在写入的 .log |
| /tmp 与 /var/tmp |
按“未访问时间”清理:/tmp 10天、/var/tmp 30天 |
systemd-tmpfiles --clean |
通过 /etc/tmpfiles.d 自定义与排除目录 |
| 大文件定位 |
查找并人工确认后清理 |
du -sh /*;ncdu /;find / -type f -size +100M |
避免误删数据库/容器数据 |
| 包管理器冗余 |
移除无用依赖 |
yum autoremove |
删除前确认依赖关系 |
| 可选:内存缓存 |
仅在特殊场景手动释放 |
sync && echo 3 > /proc/sys/vm/drop_caches |
一般不建议定时清理,可能影响性能 |
以上阈值可按业务与磁盘容量微调,生产环境建议先在测试环境验证。
三 自动化与定时执行
-
systemd-tmpfiles 自动清理
- 默认规则:/tmp 10d、/var/tmp 30d;排除项如 systemd 私有目录。可于**/etc/tmpfiles.d/clean.conf**自定义:
- 示例:v /tmp 1777 root root 30d
- 示例:x /tmp/mysql*(排除匹配前缀)
- 生效与执行:systemctl restart systemd-tmpfiles-clean.service;也可手动执行 systemd-tmpfiles --clean;清理日志:journalctl -u systemd-tmpfiles-clean.service。
-
定时任务 cron
- 建议将不同任务拆分到独立脚本,便于维护与回滚:
- 示例(每日清理临时文件):0 3 * * * /usr/bin/find /tmp -type f -delete
- 示例(每周清理旧日志归档):0 2 * * 0 find /var/log -name “*.gz” -mtime +28 -delete
- 确保 crond 运行:systemctl start crond && systemctl enable crond。
-
可选:自定义“回收站”
- 通过别名或包装脚本将 rm 改为 mv 到**~/.trash**,并按日期分目录;配合 @weekly 定时清理旧数据,降低误删风险。
四 安全与回滚建议
- 保护关键目录与进程:清理**/tmp前确认无服务依赖;必要时在 tmpfiles.d 中排除如/tmp/mysql等目录;检查权限应为1777*(粘滞位)。
- 日志与缓存的正确姿势:优先使用logrotate管理日志生命周期;drop_caches仅作临时排障手段,不建议纳入日常定时任务,以免影响文件系统性能。
- 变更流程:先在测试环境验证脚本与阈值;重要清理前做配置与数据备份;对删除类操作保留可审计日志(重定向到专用日志文件)。