温馨提示×

debian nginx日志怎么切割

小樊
41
2026-10-24 22:03:18
栏目: 智能运维

在 Debian 上,Nginx 日志切割最推荐、最省事的方式是使用系统自带的 logrotate(Debian 默认已安装并集成 Nginx)。

下面分几种方式说明:


一、使用 logrotate(推荐 ✅)

1. 查看现有配置

Debian 安装 Nginx 后,通常已有:

/etc/logrotate.d/nginx

内容一般类似:

/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
    endscript
}

2. 常用参数说明

  • daily:每天切割
  • weekly:每周
  • rotate 14:保留 14 份
  • compress:压缩旧日志
  • notifempty:空日志不切
  • create:新建日志文件权限

3. 手动测试

logrotate -d /etc/logrotate.d/nginx   # 模拟执行
logrotate -f /etc/logrotate.d/nginx   # 强制执行

二、修改切割频率(示例)

每天切割并保留 30 天

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl kill -s USR1 nginx.service
    endscript
}

Nginx 通过 USR1 信号重新打开日志文件


三、使用 systemd 定时(不常用)

如果你不用 logrotate,可以写脚本:

mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/log/nginx/nginx.pid)

然后用 crontab -e:

0 0 * * * /usr/local/bin/nginx_log_cut.sh

⚠️ 不推荐,维护成本高


四、Docker / 自定义路径注意

  • 日志路径要写对
  • 容器内需 kill -USR1 或 nginx -s reopen
  • 建议挂载日志目录到宿主机再用 logrotate

五、验证是否生效

ls -lh /var/log/nginx/

看到 access.log.1.gz 说明成功 ✅


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

  • 是否用 Docker
  • 日志路径
  • 想 每天 / 每周 切

我可以直接帮你写一份完整配置。

0 踩