Nginx, logrotate and empty files

logrotatenginx

I have a problem with nginx/logrotate. The problems is that nginx is logging access to 2 files (main and data).

I have the following contrab setting:
0 * * * * /usr/sbin/logrotate -f /home/orwell/orwell-setup/bin/logrotate-nginx

And the file "logrotate-nginx" has the following content:

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

The work is done in the two files, but there is a problem that nginx stops logging into those files. Both files are created, but they are empty.

Any ideas why nginx stop logging info to both files?

Best Answer

A bit late, but I've found it seems like its a bug in the USR1 signalling to nginx. According to the documentation it is meant to re-open the logs (http://wiki.nginx.org/LogRotation), but it doesn't appear to.

I've put a workaround in by sending a HUP instead, which will reload the configuration.

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

It appears to fix it, but if the USR1 call was working, it would be healthier to do that as its the minimal operation. HUP I don't think will drop any connections at least.