nginx 日志文件自动从 *.log 更改为 *.log.1

nginx 日志文件自动从 *.log 更改为 *.log.1

我在 nginx 日志文件中遇到问题。

以前我只将日志记录到文件中,

            access_log /var/log/nginx/infotrack_access.log rsyslog;

我将以下文件添加到我的/etc/nginx/sites-available/alpha.conf文件中,

                access_log syslog:server=localhost:514,tag=infotrack rsyslog;

添加此行之后,我遇到一个问题,即infotrack_access.log日志不是在文件中,而是在文件中生成infotrack_access.log.1

这是 /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
}

当我重新加载或重新启动 nginx 时,日志会暂时显示为innfotrack_access.log,但过了一会儿,日志又会显示为infotrack_access.log.1

为什么会发生这种情况?我没有对/etc/nginx/nginx.conf文件进行任何更改。

我该如何解决它?

答案1

在调试和强制模式下运行 logroate。logrotate --force -d /etc/logrotate.d/nginx这将详细显示错误消息。还要检查日志文件夹的所有者。

这可能与这个错误有关:https://bugs.launchpad.net/nginx/+bug/1450770

答案2

在 发布的错误链接中找到了答案Tux_DEV_NULL

看起来 nginx 在轮换后面临一些问题。

因此,我需要对 postrotate 部分进行一些修改,

 postrotate
        #invoke-rc.d nginx rotate >/dev/null 2>&1
        start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
 endscript

或者对一些人来说,这也是可行的,

 postrotate
     #invoke-rc.d nginx rotate >/dev/null 2>&1
     nginx -s reload
 endscript

相关内容