Nginx

nginx 日誌文件自動從 *.log 更改為 *.log.1

  • August 19, 2017

我在 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文件進行任何更改。

我該如何解決?

在調試和強制模式下執行 logroate。logrotate --force -d /etc/logrotate.d/nginx. 這將詳細顯示錯誤消息。還要檢查日誌文件夾的所有者。

它可能與此錯誤有關:https ://bugs.launchpad.net/nginx/+bug/1450770

在 發布的錯誤連結中得到了答案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

引用自:https://serverfault.com/questions/868862