温馨提示×

如何切割nginx日志文件

小樊
37
2026-08-29 04:52:25
栏目: 编程语言

Nginx 中,切割(rotate)日志文件通常不靠 Nginx 自身,而是借助 日志轮转工具脚本 来完成。下面给你几种常用且可靠的方法,从“最推荐”到“临时方案”。


✅ 方法一(最推荐):使用 logrotate(生产环境标准做法)

1️⃣ 安装 logrotate(一般系统自带)

which logrotate

2️⃣ 创建 Nginx 日志切割配置

编辑或新建:

vim /etc/logrotate.d/nginx

示例配置(✅ 推荐):

/var/log/nginx/*.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    delaycompress
    dateext
    dateformat -%Y%m%d
    create 0640 nginx nginx
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1 || true
    endscript
}

3️⃣ 配置说明

参数 含义
daily 每天切割
rotate 30 保留 30 天
compress 压缩旧日志
dateext 文件名加日期
postrotate 切割后 reload nginx

4️⃣ 手动测试

logrotate -vf /etc/logrotate.d/nginx

优点

  • 标准、稳定
  • 不丢日志
  • 适合生产环境

✅ 方法二:手动切割(适合临时维护)

1️⃣ 重命名旧日志

mv /var/log/nginx/access.log /var/log/nginx/access.log.2026-01-21
mv /var/log/nginx/error.log /var/log/nginx/error.log.2026-01-21

2️⃣ 通知 Nginx 重新打开日志

nginx -s reopen
# 或
kill -USR1 $(cat /var/run/nginx.pid)

优点

  • 简单直接
  • 不依赖工具

⚠️ 缺点

  • 不适合长期自动化

✅ 方法三:使用自定义脚本 + crontab

1️⃣ 脚本示例

#!/bin/bash
LOG_PATH="/var/log/nginx"
DATE=$(date +%Y%m%d)

mv $LOG_PATH/access.log $LOG_PATH/access.log.$DATE
mv $LOG_PATH/error.log $LOG_PATH/error.log.$DATE

nginx -s reopen

2️⃣ 定时任务

crontab -e
0 0 * * * /bin/bash /usr/local/bin/nginx_log_rotate.sh

❌ 不推荐的方法

  • 直接删除 access.log
  • 不 reload nginx 就直接 mv 日志
  • 使用 kill -9 强制杀进程

✅ 推荐方案总结

场景 推荐方式
生产环境 ✅ logrotate
临时维护 手动 + nginx -s reopen
特殊需求 自定义脚本

如果你愿意,我可以:

  • ✅ 帮你写 适合你系统的 logrotate 配置
  • ✅ 检查你当前 Nginx 日志路径
  • ✅ 给你一个 Docker / Kubernetes 场景的日志切割方案

只要告诉我你的 系统版本 + Nginx 部署方式 即可。

0