温馨提示×

Debian日志如何滚动

小樊
44
2026-07-27 01:05:46
栏目: 智能运维

在 Debian 系统中,日志滚动(Log Rotation)主要由 logrotate 工具完成。下面从 原理、配置、常见示例、手动测试 几个方面说明。


一、logrotate 工作原理

  • logrotate 按时间或大小自动:
    • 重命名旧日志(如 .log.1
    • 压缩旧日志(如 .log.2.gz
    • 删除过旧日志
    • 重新创建或截断日志文件
  • Debian 默认每天由 cron / systemd timer 触发一次 logrotate。

检查是否安装:

dpkg -l logrotate

二、主配置文件与目录结构

1️⃣ 主配置文件

/etc/logrotate.conf

主要控制全局策略,例如:

weekly
rotate 4
create
compress
include /etc/logrotate.d

2️⃣ 单个服务配置目录(重点)

/etc/logrotate.d/

每个服务一个文件,如:

/etc/logrotate.d/nginx
/etc/logrotate.d/rsyslog

三、常见日志滚动配置示例

✅ 示例 1:普通日志文件

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

说明:

参数 含义
daily 每天滚动
rotate 7 保留 7 个历史文件
compress 压缩旧日志
missingok 文件不存在也不报错
notifempty 空文件不滚动
create 创建新日志文件
postrotate 滚动后执行(如重加载服务)

四、Debian 系统日志(rsyslog)示例

/var/log/syslog
/var/log/auth.log
{
    rotate 7
    daily
    missingok
    notifempty
    compress
    delaycompress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

Debian 默认已配置好,一般不需要修改。


五、按大小滚动(示例)

/var/log/big.log {
    size 100M
    rotate 5
    compress
    missingok
    notifempty
}

六、手动测试 logrotate

1️⃣ 调试模式(不真正执行)

logrotate -d /etc/logrotate.conf

2️⃣ 强制执行(可用于测试)

logrotate -vf /etc/logrotate.conf

七、logrotate 的执行方式(Debian)

systemd(新系统)

systemctl status logrotate.timer
systemctl enable logrotate.timer

cron(旧系统)

/etc/cron.daily/logrotate

八、常见错误排查

❌ 日志没被轮转

  1. 检查是否命中规则(路径、文件名)
  2. 检查权限
  3. 查看:
cat /var/lib/logrotate/status

❌ 日志继续写入旧文件

原因:程序没重新打开日志文件
✅ 解决:使用 postrotate 重新加载服务


九、journalctl(systemd 日志)

systemd-journald 的日志 不是 logrotate 管理,而是:

journalctl --vacuum-size=100M
journalctl --vacuum-time=7d

配置文件:

/etc/systemd/journald.conf

总结

Debian 日志滚动核心工具:logrotate
配置位置:/etc/logrotate.conf + /etc/logrotate.d/
可执行 logrotate -vf 手动测试
systemd 日志用 journalctl 管理

如果你有 某个具体服务(Nginx / Docker / 自定义程序) 的日志,我可以帮你写一份专用 logrotate 配置。

0