[uWSGI] Namespaced vassals and log rotation

Łukasz Mierzwa l.mierzwa at gmail.com
Sun Apr 6 14:37:22 CEST 2014


With logto2 during uwsgi_setup_log_master fd=1 is still stdout, not our log
file. So lseek on it fails.
This is because uwsgi_setup_log_master is called first and logto() is
called after it. File descriptor switching required for
uwsgi_setup_log_master() is done in logto().
We need to change ordering here, I'll make a pull request.


2014-04-06 12:37 GMT+02:00 Łukasz Mierzwa <l.mierzwa at gmail.com>:

> FYI - this is not related to namespaces, logto2 + log-maxsize doesn't work
> properly in any case.
> When uWSGI starts it write to file descriptor 2, it's always the log file.
> But after privilages drop when logto2 takes over it writes to file
> descriptor 3, since this is the value of uwsgi.original_log_fd.
> Parts of code uses hardcoded fd=2, parts are using original_log_fd. I
> think that original_log_fd should only be used if log-master is enabled,
> but I'm not sure yet.
> This leads to strange bugs like lseek errors in uwsgi_check_logrotate() -
> it will return illegal seek error every time, I thinks this is happening
> since it tries to seek on fd=2 with SEEK_CUR of fd=3 (from original_log_fd,
> it's my rotated log fd). Seek error is  ignored (lseek returns <0) so when
> it's casted to unsigned long long uwsgi_check_logrotate() thinks that my
> log is extremely big, while it's still 0 bytes long.
> I'm gonna need some time to figure it out.
>
>
> 2014-04-05 19:43 GMT+02:00 Łukasz Mierzwa <l.mierzwa at gmail.com>:
>
> FYI I'm done for today, but I'll try to debug it tomorrow (--namespace +
>> --logto2 + --log-maxsize combination).
>>
>>
>> 2014-04-05 18:07 GMT+02:00 Łukasz Mierzwa <l.mierzwa at gmail.com>:
>>
>> I don't think this is the case, I do have log-backupname set and new log
>>> file was created.
>>>
>>>
>>> 2014-04-05 18:03 GMT+02:00 Łukasz Mierzwa <l.mierzwa at gmail.com>:
>>>
>>> So I shall write one ;P
>>>>
>>>>
>>>> 2014-04-05 17:53 GMT+02:00 Roberto De Ioris <roberto at unbit.it>:
>>>>
>>>>
>>>>> > Hi,
>>>>> >
>>>>> > I'm not sure if this is bug with logging or I simply failed to find
>>>>> the
>>>>> > right combination of options. Right now I'm pushing logs from vassals
>>>>> > using
>>>>> > remote syslog plugin (localhost syslog over tcp), it works just
>>>>> fine. I
>>>>> > wanted to switch to plain log files, each vassal would have rotated
>>>>> log
>>>>> > file inside the namespace.
>>>>> >
>>>>> > If I use --logto I must pass full path including namespace path,
>>>>> example:
>>>>> > --logto=/ns/app1/home/uwsgi.log
>>>>> > so I guess that logs are opened before jailing vassal.
>>>>> >
>>>>> > If I'll add --log-maxsize it doesn't work regardless if I set full
>>>>> path,
>>>>> > or
>>>>> > just path inside the namespace. I think that uWSGI  tries to call
>>>>> rename()
>>>>> > using full path as first arg, but we are inside the namespace so it
>>>>> fails.
>>>>> >
>>>>> > So i tried using --logto2 - it would open logfile after dropping
>>>>> > privileges, so it will happen inside my namespace. This works just
>>>>> fine.
>>>>> >
>>>>> > So I've added --log-maxsize again, log is being rotated, but all
>>>>> writes
>>>>> > are
>>>>> > still going to rotated log, looks like it's not being reopened after
>>>>> > rotating. I've checked with lsof and it turns out that master
>>>>> process has
>>>>> > new file opened, but all workers keep old file opened.
>>>>> > I've tried adding --log-master, but it doesn't seem to have any
>>>>>  effect.
>>>>> >
>>>>> > Am I missing something with this setup?
>>>>> >
>>>>>
>>>>> --logto2 seems the right approach to me, but the problem is here:
>>>>>
>>>>> https://github.com/unbit/uwsgi/blob/master/core/logging.c#L520
>>>>>
>>>>> the filename checked is the one from --logto
>>>>>
>>>>> it should be an easy fix, i will wait for your patch ;)
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Roberto De Ioris
>>>>> http://unbit.it
>>>>> _______________________________________________
>>>>> uWSGI mailing list
>>>>> uWSGI at lists.unbit.it
>>>>> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Łukasz Mierzwa
>>>>
>>>
>>>
>>>
>>> --
>>> Łukasz Mierzwa
>>>
>>
>>
>>
>> --
>> Łukasz Mierzwa
>>
>
>
>
> --
> Łukasz Mierzwa
>



-- 
Łukasz Mierzwa
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.unbit.it/pipermail/uwsgi/attachments/20140406/45fbb35f/attachment.html>


More information about the uWSGI mailing list