Nginx、logrotate 和空文件

Nginx、logrotate 和空文件

我遇到了 nginx/logrotate 问题。问题是 nginx 正在记录对 2 个文件(主文件和数据文件)的访问。

我有以下 contrab 设置: 0 * * * * /usr/sbin/logrotate -f /home/orwell/orwell-setup/bin/logrotate-nginx

文件“logrotate-nginx”包含以下内容:

/tmp/data.log {
    rotate 90
    daily
    missingok
    notifempty
    size 1
    sharedscripts
    postrotate
        [ ! -f /tmp/nginx.pid ] || kill -USR1 `cat /tmp/nginx.pid`
        MORE THINGS
    endscript
}


/tmp/main.log {
    rotate 90
    daily
    missingok
    notifempty
    size 1
    sharedscripts
    postrotate
        [ ! -f /tmp/nginx.pid ] || kill -USR1 `cat /tmp/nginx.pid`
        MORE THINGS
    endscript
}

这两个文件完成了工作,但是存在一个问题,即 nginx 停止登录这两个文件。两个文件都已创建,但它们是空的。

知道为什么 nginx 停止将信息记录到两个文件吗?

答案1

有点晚了,但我发现这似乎是 USR1 向 nginx 发出信号的一个错误。根据文档,它旨在重新打开日志(http://wiki.nginx.org/LogRotation),但事实似乎并非如此。

我提出了一种解决方法,即发送 HUP,这将重新加载配置。

[ ! -f /tmp/nginx.pid ] || kill -HUP `cat /tmp/nginx.pid`

看起来它解决了这个问题,但如果 USR1 呼叫正在工作,那么这样做会更健康,因为它是最小操作。HUP 我认为至少不会断开任何连接。

答案2

有点晚了,但我发现它似乎是 USR1 向 nginx 发送信号中的一个错误。

您必须检查日志文件夹的权限。Nginx 用户必须对该文件夹具有执行/搜索权限。

并且日志在信号 USR1 之后正常工作:)

相关内容