温馨提示×

如何轮转debian日志

小樊
36
2026-10-21 15:38:15
栏目: 智能运维

在 Debian 系统中,“轮转日志”通常是指使用 logrotate 工具对系统或应用日志进行自动切割、压缩、删除和邮件通知等管理。下面按常见场景说明。


一、Debian 默认的日志轮转机制

Debian 默认已安装并启用 logrotate:

which logrotate
# 通常输出:/usr/sbin/logrotate

配置文件位置:

  • 主配置:/etc/logrotate.conf
  • 子配置目录:/etc/logrotate.d/(推荐在这里配置应用日志)

系统一般通过 cron 或 systemd timer 每天执行一次:

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

二、基本 logrotate 配置示例

1. 系统日志(如 /var/log/myapp.log)

创建配置文件:

sudo nano /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:轮转后执行命令(如重载服务)

三、手动测试 logrotate

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

sudo logrotate -d /etc/logrotate.d/myapp

2. 强制执行

sudo logrotate -f /etc/logrotate.d/myapp

四、常见日志轮转场景

1. Nginx 日志(Debian 自带)

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi
    endscript
    postrotate
        invoke-rc.d nginx rotate >/dev/null 2>&1 || true
    endscript
}

2. 自定义服务(不重启,只重开日志)

如果程序支持 USR1 信号:

/var/log/myservice.log {
    size 100M
    rotate 5
    compress
    copytruncate
}

copytruncate 适合不能重载日志的程序。


五、使用 size 触发轮转

不想按时间,而是按大小:

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

六、查看轮转结果

ls -lh /var/log/
# 例如:
# app.log
# app.log.1.gz
# app.log.2.gz

七、常见问题

日志没轮转?

  • 查看是否 notifempty
  • 查看 cron / timer 是否运行
  • 使用 -d 调试

权限错误?

确保:

  • logrotate 以 root 运行
  • create 权限正确

如果你有具体日志路径或服务(如 Docker、Java、rsyslog、自定义脚本),我可以给你更精确的轮转配置。

0 踩