Linux日志太大如何清理_logrotate配置技巧【指导】

2次阅读

正确做法是用 logrotate 实现安全轮转 + 自动清理,按大小触发(如 size 100M)、保留 14 次归档、启用 dateext 和 delaycompress,并配合 journald.conf 限制日志总量与保留时长。

Linux 日志太大如何清理_logrotate 配置技巧【指导】

linux 日志太大,直接删文件风险高、易中断服务,正确做法是用 logrotate 实现安全轮转 + 自动清理。它不删除当前日志,而是按规则归档、压缩、过期清除,兼顾可追溯性与磁盘空间。

确认 logrotate 已就位并了解默认行为

主流发行版(ubuntu/centos/RHEL)都预装 logrotate。运行以下命令验证:

  • logrotate –version 查看版本
  • ls /etc/logrotate.conf /etc/logrotate.d/ 确认主配置和应用配置目录存在
  • cat /etc/cron.daily/logrotate 查看系统是否已通过 cron 每天自动执行(默认路径,多数系统启用)

注意:logrotate 默认读取 /etc/logrotate.conf,再自动包含 /etc/logrotate.d/ 下所有文件。无需手动启动服务,靠 cron 触发即可。

针对大日志快速生效的实用配置项

不要只依赖全局 weekly 或 rotate 4。对增长快的服务(如 nginx 访问日志、自研应用日志),推荐按大小触发 + 保留合理天数:

  • size 100M:当日志单个文件超过 100MB 就立即轮转(比 daily 更及时)
  • rotate 14:保留最近 14 个归档(不是 14 天,是 14 次轮转;若每天一次,即约两周)
  • dateext:归档文件带日期后缀(如 access.log-20251218),比数字序号更直观易查
  • compress & delaycompress:压缩节省空间,delaycompress 避免刚轮转的日志被立刻压缩,方便紧急查看
  • missingok & notifempty:防止因日志路径不存在或为空导致轮转失败报错

示例(保存为 /etc/logrotate.d/nginx-large):

/var/log/nginx/*.log {size 100M     rotate 14     dateext     compress     delaycompress     missingok     notifempty     create 0644 www-data www-data }

立即验证与强制执行,避免等明天

改完配置别干等 cron,用调试和强制模式快速验证效果:

  • logrotate -d /etc/logrotate.d/nginx-large:仅模拟执行,显示每步操作但不真实改动(检查路径、权限、条件是否匹配)
  • logrotate -f /etc/logrotate.d/nginx-large:强制立即轮转,适用于日志已爆满需马上释放空间
  • ls -lt /var/log/nginx/*.gz /var/log/nginx/*-2025*:确认新归档是否生成、压缩是否生效

配合 systemd-journald 控制二进制日志膨胀

如果系统启用了 journald(默认开启),/run/log/journal//var/log/journal/ 可能悄悄占几十 GB。仅配 logrotate 不管用,需单独限制:

  • 编辑 /etc/systemd/journald.conf,取消注释并设值:
  • SystemMaxUse=500M(总占用上限)
  • MaxRetentionSec=7d(最多保留 7 天)
  • 重启生效:sudo systemctl restart systemd-journald
  • 立即清理:sudo journalctl –vacuum-size=500Mjournalctl –vacuum-time=7d

站长
版权声明:本站原创文章,由 站长 2025-12-19发表,共计1489字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources