温馨提示×

linux怎么切割nginx日志

小樊
46
2026-09-29 19:11:57
栏目: 智能运维

在 Linux 下“切割 Nginx 日志”常见有三种方式:logrotate(推荐)、手动脚本 + reload、Nginx 自带 reopen。下面按实用程度说明。


一、使用 logrotate(最推荐 ✅)

Nginx 通常自带 logrotate 配置:

/etc/logrotate.d/nginx

示例配置(可修改):

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx nginx
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

手动测试

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

✅ 优点:自动、稳定、系统级支持


二、手动切割脚本(适合自定义)

思路

  1. 移动旧日志
  2. 让 Nginx 重新打开日志文件

脚本示例

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

mv $LOG_PATH ${LOG_PATH}.${DATE}
kill -USR1 $(cat /var/run/nginx.pid)

加入 crontab:

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

三、Nginx 原生方式(USR1 信号)

mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F)
kill -USR1 $(cat /var/run/nginx.pid)

✅ 不重启 Nginx
❌ 需自己写调度


四、常见坑

  • 权限问题:日志属主必须是 nginx 用户可写
  • SELinux:可能导致写不了新日志
  • docker nginx:需在容器内执行或挂载日志卷

五、推荐方案总结

场景 推荐方式
服务器常规部署 logrotate
自定义命名 脚本 + USR1
Docker 挂载卷 + logrotate

如果你告诉我:

  • 系统(CentOS / Ubuntu)
  • Nginx 安装方式(源码 / apt / docker)

我可以给你完全可复制的配置。

0 踩