温馨提示×

debian日志轮转如何配置

小樊
55
2026-09-01 03:28:10
栏目: 智能运维

在 Debian 中,**日志轮转(log rotation)**通常由 logrotate 工具完成。下面从「原理 → 配置位置 → 常用参数 → 示例 → 调试命令」系统讲一下。


一、logrotate 基本原理

  • logrotate 由 cron / systemd timer 定期调用(通常每天一次)
  • 读取配置文件,判断日志是否满足轮转条件
  • 对日志进行:重命名、压缩、删除旧日志、发送信号(如 HUP)

二、配置文件位置

1. 主配置文件

/etc/logrotate.conf

2. 子配置目录(推荐放这里)

/etc/logrotate.d/

⚠️ 实际服务(nginx、rsyslog、apt 等)的轮转规则都在 /etc/logrotate.d/


三、常用配置参数说明

参数 作用
daily / weekly / monthly 轮转周期
rotate N 保留 N 个旧日志
size 100M 日志达到大小后轮转
missingok 日志不存在不报错
notifempty 空日志不轮转
compress 压缩旧日志
delaycompress 延迟一轮再压缩
create 0640 user group 新建日志文件
copytruncate 拷贝后清空原日志(不重命名)
postrotate ... endscript 轮转后执行命令(如重载服务)

四、示例配置

示例 1:自定义应用日志

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

保存为:

/etc/logrotate.d/myapp

示例 2:使用 copytruncate(不能发信号的服务)

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

五、立即测试(不真正轮转)

logrotate -d /etc/logrotate.d/myapp

✅ 只显示将要执行的操作


六、强制立即轮转

logrotate -f /etc/logrotate.d/myapp

七、查看 logrotate 是否运行

systemd 系统(Debian 9+)

systemctl status logrotate.timer

手动执行全部配置

logrotate /etc/logrotate.conf

八、常见问题

1. 日志没轮转?

  • 检查 cron / timer 是否运行
  • 看 /var/lib/logrotate/status
  • 用 -d 调试

2. 服务不写新日志?

  • 使用 create 或 copytruncate
  • 确保 postrotate 正确 reload 服务

如果你有 具体服务(nginx / tomcat / 自定义程序) 或 想按大小/时间轮转,我可以给你定制一份配置。

0 踩