我在 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
这将详细显示错误消息。还要检查日志文件夹的所有者。
答案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