温馨提示×

如何自定义CentOS Cleanup规则

小樊
47
2025-10-05 02:23:46
栏目: 智能运维

一、系统级临时文件清理规则(systemd管理,CentOS 7及以上)
CentOS 7及以上版本使用systemd-tmpfiles-clean.service管理临时文件清理,核心配置文件位于/usr/lib/tmpfiles.d/tmp.conf(系统默认规则)。若需自定义,可通过以下方式扩展:

  • 覆盖或新增规则:在/etc/tmpfiles.d/目录下创建自定义配置文件(如custom-cleanup.conf),添加符合tmpfiles.d语法的规则。例如,保留/tmp下以tomcat开头的目录(避免Tomcat上传目录被清理),可添加:
    x /tmp/tomcat.*
    
    其中,x表示“排除”(不清理匹配路径),支持shell风格通配符(如*?)。
  • 规则语法说明
    • v /path permissions owner group age:清理指定路径下age(如10d表示10天前)未修改的文件/目录;
    • x /path:排除指定路径(不清理);
    • X /path:排除指定路径自身(但清理其子内容)。
  • 验证规则:修改配置后,重启systemd-tmpfiles-clean.service使规则生效:
    sudo systemctl restart systemd-tmpfiles-clean.service
    
    或手动触发清理:
    sudo systemd-tmpfiles --clean
    

二、日志文件清理规则(logrotate工具)
日志文件是磁盘空间占用的主要来源之一,通过logrotate可实现定期轮转、压缩和删除旧日志。自定义规则需编辑/etc/logrotate.conf(全局配置)或在/etc/logrotate.d/下创建应用特定配置(如nginxmysql):

  • 基础配置示例(针对/var/log/*.log):
    /var/log/*.log {
        daily           # 每日轮转
        missingok       # 忽略缺失日志文件
        rotate 7        # 保留7个旧日志
        compress        # 压缩旧日志(gzip)
        notifempty      # 空日志不轮转
        create 0640 root root  # 新日志权限与所有者
    }
    
  • 高级选项
    • size 100M:当日志文件超过100MB时立即轮转(可替代daily);
    • postrotate/endscript:轮转后执行的命令(如重启服务刷新日志句柄):
      postrotate
          systemctl restart nginx
      endscript
      
  • 手动测试:使用logrotate -vf /etc/logrotate.conf强制运行并显示详细过程。

三、YUM/DNF缓存清理规则
YUM(CentOS 7及以下)或DNF(CentOS 8及以上)的缓存会占用/var/cache/yum(或/var/cache/dnf)目录,可通过以下命令自定义清理:

  • 清理所有缓存(包括软件包和元数据):
    sudo yum clean all  # CentOS 7及以下
    sudo dnf clean all  # CentOS 8及以上
    
  • 仅清理过期缓存(不删除现有软件包缓存):
    sudo yum clean expire-cache  # CentOS 7及以下
    sudo dnf clean expire-cache  # CentOS 8及以上
    
  • 自动化清理:将上述命令添加到定时任务(如每周日凌晨2点执行):
    sudo crontab -e
    
    添加以下行:
    0 2 * * 0 /usr/bin/yum clean all  # CentOS 7及以下
    0 2 * * 0 /usr/bin/dnf clean all  # CentOS 8及以上
    

四、孤立包与旧内核清理规则

  • 孤立包清理(无依赖的软件包):使用package-cleanup工具(需安装yum-utils):
    sudo yum install yum-utils -y
    sudo package-cleanup --leaves  # 列出孤立包
    sudo package-cleanup --leaves --dry-run  # 模拟删除(不实际执行)
    sudo package-cleanup --leaves --yes  # 实际删除
    
  • 旧内核清理(保留最近n个内核):
    sudo package-cleanup --oldkernels --count=2  # 保留2个最新内核,删除其余
    
    可将上述命令添加到定时任务,定期清理孤立包和旧内核。

五、大文件与旧文件清理规则
使用find命令查找并删除指定条件的文件(如大于100MB的文件、30天未修改的文件):

  • 查找并删除大于100MB的文件
    sudo find /path/to/search -type f -size +100M -exec ls -lh {} \;  # 先查看文件
    sudo find /path/to/search -type f -size +100M -exec rm -f {} \;  # 再删除
    
  • 查找并删除30天未修改的文件
    sudo find /path/to/search -type f -mtime +30 -exec rm -f {} \;
    
  • 自动化脚本:将上述命令封装为脚本(如cleanup-large-files.sh),并通过cron定期执行:
    sudo crontab -e
    
    添加以下行(每天凌晨3点执行):
    0 3 * * * /usr/local/bin/cleanup-large-files.sh >> /var/log/cleanup.log 2>&1
    

六、自动化与监控

  • 定时任务:使用crontab -e配置定时任务,将清理脚本设置为定期执行(如每天、每周),确保清理工作自动化。
  • 监控与报警:使用df -h(磁盘空间)、free -h(内存)命令定期检查资源使用情况,或通过Nagios、Prometheus等工具设置报警阈值(如磁盘空间超过80%时报警)。

0