linux

nginx日志切割方法介绍

小樊
93
2025-04-10 11:05:13
栏目: 编程语言

Nginx 日志切割对于日志管理和系统维护至关重要。以下是几种常见的 Nginx 日志切割方法:

使用 logrotate 进行日志切割

logrotate 是 Linux 系统中用于管理日志文件的工具,可以按时间或大小对日志文件进行切割、压缩和清理。以下是使用 logrotate 进行 Nginx 日志切割的步骤:

  1. 创建 logrotate 配置文件: 在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 nginx。配置文件示例如下:

    /var/log/nginx/access.log {
        daily            # 按天切割日志
        rotate 30        # 保留 30 个日志文件
        missingok        # 如果日志文件不存在,则不报错
        notifempty      # 如果日志文件为空,则不进行轮替
        compress         # 压缩旧日志文件
        delaycompress    # 延迟压缩上一个周期的日志文件
        create 0640 www-data www-data # 新日志文件的权限和所有者
        sharedscripts    # 共享脚本,等 access 和 error 两个日志都轮转之后再执行下面的脚本
        postrotate
            if [ -f /var/run/nginx.pid ]; then
                kill -USR1 $(cat /var/run/nginx.pid) # 向 Nginx 发送 USR1 信号,重开日志文件
            fi
        endscript
    }
    
    /var/log/nginx/error.log {
        daily            # 按天切割日志
        rotate 30        # 保留 30 个日志文件
        missingok        # 如果日志文件不存在,则不报错
        notifempty      # 如果日志文件为空,则不进行轮替
        compress         # 压缩旧日志文件
        delaycompress    # 延迟压缩上一个周期的日志文件
        create 0640 www-data www-data # 新日志文件的权限和所有者
        sharedscripts    # 共享脚本
        postrotate
            if [ -f /var/run/nginx.pid ]; then
                kill -USR1 $(cat /var/run/nginx.pid) # 重启 Nginx 日志进程
            fi
        endscript
    }
    
  2. 测试配置: 使用以下命令测试配置文件是否正确:

    sudo logrotate -vf /etc/logrotate.conf
    
  3. 设置定时任务: 使用 crontab 设置定时任务,使 logrotate 每天执行日志切割。例如,每天凌晨 0 点执行:

    0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx
    

使用脚本进行日志切割

除了使用 logrotate,还可以编写自定义脚本来实现日志切割。以下是一个简单的 Bash 脚本示例:

#!/bin/bash

# 指定日志路径和备份目录
LOG_PATH="/usr/local/nginx/logs"
BACKUP_PATH="/var/log/nginx/backup"

# 获取当前日期并生成备份目录
DATE=$(date +"%Y-%m-%d")
BACKUP_DIR="$BACKUP_PATH/$DATE"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 移动并重命名日志文件
mv "$LOG_PATH/access.log" "$BACKUP_DIR/access_$DATE.log"
mv "$LOG_PATH/error.log" "$BACKUP_DIR/error_$DATE.log"

# 通知 Nginx 重新生成新的日志文件
kill -USR1 $(cat "$LOG_PATH/nginx.pid")
  1. 设置定时任务: 使用 crontab 设置定时任务,使脚本每天执行日志切割。例如,每天凌晨 1 点执行:

    0 1 * * * /path/to/your/script.sh
    

验证日志切割

无论使用哪种方法,都可以通过以下命令验证日志切割是否按预期工作:

通过以上方法,可以有效地管理和维护 Nginx 日志文件,确保系统的稳定性和性能。

0
看了该问题的人还看了