httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rainer Jung <rainer.j...@kippdata.de>
Subject Re: Using gzip and CustomLog
Date Sun, 08 Feb 2009 15:20:15 GMT
On 28.01.2009 06:50, Paras Fadte wrote:
> I have somewhat modified the rotatlogs utility to support compression
> . Although it creates files in compressed format (.gz) and rotates
> them properly the issue that i am facing is that when apache is
> restarted (graceful or stop/start way ) the last created compressed
> file doesn't seem to get closed  . Is there a way to rectify this ?
> For compression I am using zlib .

When httpd is restarted or stopped, then most rotatelogs processes get 
stopped via a signal. The signal could depend on the platform, but in my 
case it's SIGTERM. You can "truss" your rotatelogs to verify yourself, 
whether that's true for your Linux system too. truss will show you the 
signal the rotatelogs process received before terminating.

Then you need to register a signal handler, e.g.

apr_signal(SIG_TERM, my_signal_handler);

which gets called automatically, whenever the process receives the 
respective signal. Your signal handler my_signal_handler() could then 
set an internal flag, indicating that you want to cleanup and exit 
rotatelogs.

You can check this flag before and after the blocking read from the log 
pipe, and if it is set, close your gzip output cleanly and exit rotatelogs.

You can temporarily deactivate or activate all signal handlers for 
SIG_TERM with

apr_signal_unblock(SIG_TERM);

and

apr_signal_block(SIG_TERM);

The ErrorLog for the global server behaves a little different, when 
restarting Apache it doesn't get a signal but instead it will get an 
EPIPE when trying to read from the log pipe.

Regards,

Rainer

> On Fri, Jan 23, 2009 at 1:41 PM, Paras Fadte<plfgoa@gmail.com>  wrote:
>> Thanks Rainer,
>>
>> yeah.. me not a pro at development .
>>
>> On Fri, Jan 23, 2009 at 1:30 PM, Rainer Jung<rainer.jung@kippdata.de>  wrote:
>>> On 23.01.2009 08:45, Paras Fadte wrote:
>>>> Can you please tell me in which file ?
>>> I assume you are building rotatelogs from within the httpd sources.
>>>
>>> There is a file support/Makefile, which contains a line
>>>
>>> $(LINK) $(rotatelogs_LTFLAGS) $(rotatelogs_OBJECTS) $(PROGRAM_LDADD)
>>>
>>> Simply add "-lz" at the end of the line:
>>>
>>> $(LINK) $(rotatelogs_LTFLAGS) $(rotatelogs_OBJECTS) $(PROGRAM_LDADD) -lz
>>>
>>> In case you don't know what a Makefile is and how it basically works, you
>>> need to read about how to do C software development.
>>>
>>> Regards,
>>>
>>> Rainer
>>>
>>>> On Fri, Jan 23, 2009 at 1:09 PM, Rainer Jung<rainer.jung@kippdata.de>
>>>>   wrote:
>>>>> On 23.01.2009 07:55, Paras Fadte wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I get following error when I try to use "compress" function of zlib
in
>>>>>>   "rotatelogs.c" . I have included "zlib.h" in rotatelogs.c .
>>>>>>
>>>>>> /home/paras/httpd-2.0.55/support/rotatelogs.c:294: undefined reference
>>>>>> to `compress'
>>>>>> collect2: ld returned 1 exit status
>>>>>>
>>>>>> Is it linking error ? where should I make the changes to eliminate
this
>>>>>> error?
>>>>> Add -lz to the linking flags.

Mime
View raw message