温馨提示×

centos cleanup能自动清理吗

小樊
37
2025-12-17 15:09:02
栏目: 智能运维

结论与总体思路 没有一个内置的“一键全自动清理”命令,但 CentOS 可以通过系统自带机制(如 logrotate、包管理器自清理)与定时任务(cron)组合,实现无人值守的定期清理。对于CentOS 7重点是 yum + logrotate + cron;对于CentOS 8/Stream重点是 dnf + logrotate + systemd-journald 配置 + cron

可自动化的清理项与做法

  • 包管理缓存与无用依赖
    • CentOS 7:执行 yum clean allyum autoremove;旧内核用 package-cleanup --oldkernels --count=2 -y(仅保留最近 2 个内核,避免误删正在使用的内核)。
    • CentOS 8/Stream:执行 dnf clean alldnf autoremove;旧内核用 dnf remove $(dnf repoquery --installonly --latest-limit=-2)(保留最近 2 个)。
  • 日志轮转与系统日志
    • 使用 logrotate 按日/周轮转并压缩旧日志(配置文件位于 /etc/logrotate.conf/etc/logrotate.d/),可按需调整保留份数或天数。
    • 清理 journald 日志:设置最大保留时间或大小,例如 journalctl --vacuum-time=1w(保留最近一周)或 journalctl --vacuum-size=500M;也可在 /etc/systemd/journald.conf 中设置 SystemMaxUse=MaxRetentionSec= 实现自动维护。
  • 临时文件
    • 定期清理 /tmp/var/tmp(如每日清空),并确保不会误删正在使用的会话文件。
  • 可选图形化工具
    • 桌面环境可用 BleachBit 做缓存、日志、浏览器缓存等清理,并支持命令行调用以便脚本化。

设置自动化的两种方式

  • 方式一:使用 cron 定时执行脚本(通用、可控)
    • 示例脚本(保存为 /usr/local/bin/cleanup.sh,按需调整保留策略):
      • CentOS 7 示例
        #!/bin/bash
        set -e
        yum clean all
        yum autoremove -y
        package-cleanup --oldkernels --count=2 -y
        journalctl --vacuum-time=1w
        journalctl --vacuum-size=500M
        find /tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
        find /var/tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
        
      • CentOS 8/Stream 示例
        #!/bin/bash
        set -e
        dnf clean all
        dnf autoremove -y
        dnf remove $(dnf repoquery --installonly --latest-limit=-2) 2>/dev/null || true
        journalctl --vacuum-time=1w
        journalctl --vacuum-size=500M
        find /tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
        find /var/tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
        
    • 赋权并加入计划任务(每天 2:00 执行):
      chmod +x /usr/local/bin/cleanup.sh
      echo "0 2 * * * root /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1" | tee /etc/cron.d/cleanup
      systemctl enable --now crond
      
  • 方式二:仅用系统自带机制
    • 依赖 logrotate 的定时轮转与压缩策略(无需额外脚本)。
    • /etc/systemd/journald.conf 中设置 SystemMaxUse=500MMaxRetentionSec=1week,然后执行 systemctl restart systemd-journald 使配置生效。

注意事项与建议

  • 不要盲目删除 /var/log/ 下正在写入的日志文件;优先用 logrotatejournalctl 的轮转/截断功能,避免影响正在运行的业务与审计取证。
  • 清理内存页缓存(/proc/sys/vm/drop_caches)通常不需要定时执行,仅在出现明显内存压力且确认安全时手动执行;若确需定时,务必先 sync,且仅在必要时使用。
  • 旧内核删除务必谨慎:至少保留 1–2 个可回退版本,避免升级失败无法启动;删除前用 uname -r 确认当前版本。
  • 建议将清理日志写入 /var/log/cleanup.log,便于审计与回溯;脚本加上 set -e 与错误输出,避免静默失败。

0