发现有些客户部署的服务nginx日志没有轮转,随着业务日志增多,有的一个log文件十几G,设置几十G,甚至磁盘直接干满了,服务504了。。

所以配置日志轮转及过期日志的定期清理很有必要。

以下有2种方式配置

1. 创建logrotate配置文件

cd /etc/logrotate.d/

vim nginx

配置文件内容如下:

# /etc/logrotate.d/nginx
# 下面是nginx日志路径,具体跟部署的nginx有关
/var/log/nginx/*.log {
    daily                      # 每天轮转
    missingok                  # 日志不存在时不报错
    rotate 30                  # 保留30个备份
    compress                   # 压缩旧日志
    delaycompress              # 延迟一天压缩(方便排查)
    notifempty                 # 空日志不轮转
    create 640 www-data adm    # 创建新文件的权限和属主
    sharedscripts              # 所有日志处理完后执行一次脚本
    postrotate                 # 轮转后执行的命令
        # 方法1:使用USR1信号(推荐)
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
        
        # 方法2:使用nginx命令重载
        # /usr/sbin/nginx -s reload 2>/dev/null || true
        
        # 方法3:使用systemd(推荐,如果使用systemd)
        # systemctl reload nginx 2>/dev/null || true
    endscript
}

2 nginx内置的配置文件

# /etc/nginx/nginx.conf
http {
    # 按天轮转(需要手动或cron重命名文件)
    access_log /var/log/nginx/access.log;
    
    # 或使用变量实现按天分割
    access_log /var/log/nginx/access-$year-$month-$day.log;
    
    # 更优雅的方式:在server块中配置
}

最后crontab -e添加定时任务定时删除

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐