温馨提示×

debian日志怎么轮转

小樊
51
2026-09-07 04:19:26
栏目: 智能运维

在 Debian 中,**日志轮转(log rotation)**通常是通过 logrotate 工具来完成的。下面从原理、配置、常见用法三个方面说明。


一、logrotate 基本原理

  • Debian 默认安装 logrotate
  • cron / systemd timer 定时执行(通常每天一次)
  • 配置文件位置:
    • 主配置:/etc/logrotate.conf
    • 子配置目录:/etc/logrotate.d/

执行流程:

cron / systemd-timer
        ↓
/usr/sbin/logrotate /etc/logrotate.conf
        ↓
按配置轮转日志

二、查看 logrotate 是否在运行

1. 检查包是否安装

dpkg -l | grep logrotate

2. 查看 systemd timer(推荐)

systemctl status logrotate.timer

手动执行一次(调试很有用):

logrotate -d /etc/logrotate.conf   # 模拟执行
logrotate -f /etc/logrotate.conf   # 强制执行

三、常见日志轮转配置示例

1. 系统默认配置(部分)

/etc/logrotate.conf 中通常包含:

weekly
rotate 4
create
include /etc/logrotate.d

含义:

  • weekly:每周轮转
  • rotate 4:保留 4 个旧日志
  • create:轮转后创建新日志文件

2. 自定义一个日志轮转规则

例如你有一个应用日志:/var/log/myapp.log

创建配置文件:

vim /etc/logrotate.d/myapp

内容示例:

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

参数说明:

参数 作用
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
delaycompress 延迟一次压缩
notifempty 空文件不轮转
create 创建新文件
postrotate 轮转后执行命令(如重载服务)

四、常见日志轮转方式

1. 按大小轮转

size 100M

超过 100MB 就轮转(不依赖时间)

2. 按时间 + 大小

daily
size 50M

3. 不压缩

nocompress

4. 使用 date 作为后缀

dateext
dateformat -%Y%m%d

生成示例:

myapp.log-20260121

五、systemd 服务的日志(journald)

如果你用的是 systemd,日志由 journald 管理,不走 logrotate:

查看:

journalctl

配置:

vim /etc/systemd/journald.conf

常用参数:

Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=2week

重启生效:

systemctl restart systemd-journald

六、排错建议

  1. 模拟执行看错误:
logrotate -d /etc/logrotate.d/myapp
  1. 查看执行记录:
cat /var/lib/logrotate/status
  1. 权限问题:
  • 日志目录必须 logrotate 可写
  • 服务用户需有权限 reload

如果你有具体日志路径 / 服务类型(nginx、自定义程序、docker 等),我可以帮你写一份可直接用的配置。

0