温馨提示×

debian日志轮转怎么配置

小樊
41
2026-09-03 23:47:17
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,日志轮转通常通过 logrotate 工具来配置。下面从基本概念 → 配置方式 → 常见示例 → 调试命令一步步说明。


一、logrotate 基本概念

  • 主配置文件:/etc/logrotate.conf
  • 子配置目录:/etc/logrotate.d/
  • 执行方式:由 cron / systemd timer 定期执行(通常是每天)

查看是否启用:

ls -l /etc/cron.daily/logrotate
# 或
systemctl status logrotate.timer

二、主配置文件(/etc/logrotate.conf)

示例(默认内容简化):

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

含义:

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

三、为某个服务配置日志轮转(推荐方式)

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

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

常用指令说明

指令 说明
daily/weekly/monthly 轮转周期
rotate N 保留 N 个旧日志
compress 压缩旧日志
delaycompress 延迟一次压缩
missingok 日志不存在不报错
notifempty 空日志不轮转
create MODE USER GROUP 新建日志文件
copytruncate 拷贝后清空原文件(不推荐用于数据库)
postrotate ... endscript 轮转后执行命令

四、自定义日志(例如自己的程序)

假设日志在 /opt/app/logs/app.log:

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

说明:

  • 日志超过 100M 就轮转
  • 最多保留 5 份
  • copytruncate 适合不能 reload 的程序

五、手动测试 logrotate

1. 测试配置是否正确(不真正执行)

logrotate -d /etc/logrotate.d/nginx

2. 强制执行一次

logrotate -f /etc/logrotate.d/nginx

六、常见问题

1. 日志没轮转?

  • 检查 cron 是否运行
  • 查看 /var/lib/logrotate/status
  • 看是否有报错:/var/log/syslog

2. 程序写日志报错?

  • 使用 create + postrotate reload
  • 或使用 copytruncate

3. systemd 日志(journald)

如果是 journalctl 日志:

journalctl --vacuum-size=100M

或修改:

/etc/systemd/journald.conf

如果你有具体服务或日志路径,我可以帮你写一份完整配置。

0 踩