温馨提示×

Debian日志如何轮转

小樊
51
2026-07-12 16:56:54
栏目: 智能运维

在 Debian 系统中,**日志轮转(log rotation)**主要由 logrotate 工具完成。下面从原理、配置、常用参数和排错几个方面说明。


一、日志轮转基本原理

  • 工具logrotate
  • 主配置文件/etc/logrotate.conf
  • 应用/服务配置目录/etc/logrotate.d/
  • 执行方式:由 cronsystemd timer 定期触发

Debian 默认每天执行一次日志轮转检查。


二、查看是否已启用

1️⃣ cron 方式(传统)

ls /etc/cron.daily/logrotate

2️⃣ systemd timer(较新系统)

systemctl status logrotate.timer

如果启用,会看到类似:

Loaded: loaded
Active: active (waiting)

三、主配置文件说明

/etc/logrotate.conf(全局配置)

weekly          # 默认每周轮转
rotate 4        # 保留 4 个旧日志
create          # 轮转后创建新日志文件
compress        # 压缩旧日志
include /etc/logrotate.d

四、服务日志轮转配置示例

示例:Nginx 日志

cat /etc/logrotate.d/nginx

常见内容:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    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 使用 gzip 压缩
delaycompress 延迟一次压缩
missingok 日志不存在不报错
notifempty 空日志不轮转
create 0640 user group 新建日志权限
postrotate / endscript 轮转后执行命令
copytruncate 复制后清空(不重启服务)

六、手动测试日志轮转

1️⃣ 强制执行一次

logrotate -vf /etc/logrotate.conf

2️⃣ 只测试某个服务

logrotate -vf /etc/logrotate.d/nginx

七、查看日志轮转状态

cat /var/lib/logrotate/status

或:

logrotate -v /etc/logrotate.conf

八、常见问题排查

❌ 日志没有轮转

  • 检查 cron / timer 是否运行
  • 查看 /var/lib/logrotate/status
  • 查看 /var/log/syslogjournalctl -u logrotate

❌ 权限问题

确保:

chown root:root /etc/logrotate.d/*
chmod 644 /etc/logrotate.d/*

九、自定义日志轮转示例

假设你有 /var/log/myapp.log

/var/log/myapp.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 0640 myuser mygroup
}

如果你愿意,可以告诉我:

  • 你用的是 Debian 几?
  • 系统日志(rsyslog/journald) 还是 某个具体服务?

我可以给你更精确的配置示例。

0