温馨提示×

linux日志轮转怎么配置

小樊
57
2026-09-05 13:25:08
栏目: 智能运维

在 Linux 中,**日志轮转(log rotation)**通常通过 logrotate 工具来配置。下面从「基本概念 → 配置方式 → 常见示例 → 调试命令」给你一个清晰说明。


一、logrotate 简介

  • 默认配置文件:/etc/logrotate.conf
  • 子配置目录:/etc/logrotate.d/
  • 通常每天由 cron / systemd timer 调用

二、基本配置结构

1️⃣ 全局配置(/etc/logrotate.conf)

weekly
rotate 4
create
dateext
compress

含义:

  • weekly:每周轮转
  • rotate 4:保留 4 个旧日志
  • create:创建新日志文件
  • dateext:使用日期作为后缀
  • compress:压缩旧日志

2️⃣ 单个服务配置(推荐方式)

在 /etc/logrotate.d/ 下新建文件,例如:

/etc/logrotate.d/nginx

三、常见配置示例

✅ Nginx 日志轮转

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx nginx
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1
    endscript
}

说明:

  • daily:每天轮转
  • missingok:日志不存在不报错
  • notifempty:空文件不轮转
  • delaycompress:延迟一次压缩
  • postrotate:轮转后执行命令

✅ 自定义应用日志

/opt/app/logs/app.log {
    size 100M
    rotate 5
    compress
    copytruncate
}

说明:

  • size 100M:超过 100M 就轮转
  • copytruncate:拷贝后清空原文件(适合不能重载的服务)

四、常用参数速查

参数 作用
daily / weekly / monthly 轮转周期
rotate N 保留 N 个历史日志
compress 压缩旧日志
delaycompress 延迟压缩
copytruncate 拷贝并清空
create 创建新日志文件
missingok 日志缺失不报错
notifempty 空日志不轮转
postrotate / endscript 轮转后执行脚本

五、手动测试(非常重要)

# 模拟执行(不真正轮转)
logrotate -d /etc/logrotate.d/nginx

# 强制立即执行
logrotate -f /etc/logrotate.d/nginx

六、常见坑

❌ 服务不重载 → 日志还在写旧文件
✅ 用 postrotate 或 copytruncate

❌ 权限不对 → 新日志无法写入
✅ 用 create 0640 user group


如果你有 具体服务(如 Java / Docker / systemd) 或 想按大小/时间混合策略,可以告诉我,我可以直接帮你写一份配置。

0 踩