温馨提示×

linux日志轮转如何配置

小樊
80
2026-09-08 11:38:28
栏目: 智能运维

在 Linux 中,日志轮转(log rotation)通常由 logrotate 工具管理。下面从原理、配置位置、配置示例、常用参数、调试方法几个方面说明。


一、logrotate 简介

logrotate 会按照配置:

  • 定期重命名/压缩旧日志
  • 创建新日志文件
  • 控制日志数量和大小
  • 可执行脚本(如重启服务)

通常由 cron / systemd timer 每天执行一次:

/etc/cron.daily/logrotate
# 或
systemctl status logrotate.timer

二、配置文件位置

1. 主配置文件

/etc/logrotate.conf

2. 子配置目录(推荐)

/etc/logrotate.d/

每个服务一个文件,例如:

/etc/logrotate.d/nginx
/etc/logrotate.d/tomcat

三、一个基础配置示例

示例:轮转 /var/log/myapp.log

/var/log/myapp.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 app app
    sharedscripts
    postrotate
        systemctl reload myapp > /dev/null 2>&1 || true
    endscript
}

四、常用参数说明

参数 说明
daily / weekly / monthly 轮转周期
size 100M 日志超过 100M 就轮转
rotate 7 保留 7 个旧日志
compress 压缩旧日志(.gz)
delaycompress 下次轮转再压缩
missingok 日志不存在不报错
notifempty 空日志不轮转
create 0640 user group 创建新日志文件
copytruncate 拷贝后清空原文件(不重命名)
postrotate ... endscript 轮转后执行命令

五、copytruncate 的使用场景

适合不能 reopen 日志的进程(如某些 Java、Python 程序):

/var/log/myapp.log {
    size 50M
    rotate 5
    copytruncate
    compress
}

⚠ 注意:

  • 有极小概率丢日志
  • 不推荐用于高并发写入日志

六、手动测试配置(非常重要)

1. 检查语法

logrotate -d /etc/logrotate.d/myapp
  • -d:debug 模式(不真正执行)

2. 强制执行一次

logrotate -f /etc/logrotate.d/myapp

七、常见实战示例

Nginx

/var/log/nginx/*.log {
    daily
    rotate 14
    missingok
    compress
    delaycompress
    notifempty
    create 0640 nginx nginx
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}

Tomcat(catalina.out)

/opt/tomcat/logs/catalina.out {
    copytruncate
    daily
    rotate 10
    compress
}

八、排查问题

查看执行日志

cat /var/lib/logrotate/status

常见错误

  • 权限不足(SELinux / 文件属主)
  • 服务未 reload,日志仍写旧文件
  • 忘记 create 或 copytruncate

如果你有具体服务(nginx / docker / java)或想按大小而不是时间轮转,我可以给你更精确的配置。

0 踩