I think I've been bitten by this too, years ago.

I *think* I solved it by switching to mpm_prefork, which was
unsatisfying, but adequate for my needs.

On Tue, Jan 3, 2012 at 5:21 PM, David Booth <da...@dbooth.org> wrote:
> I tried redirecting stderr to /dev/null and it did not help:
> system("date >> $f 2> /dev/null");
>
> I am using the worker processing model.  Does it work for you (or anyone
> else) without causing periodic child process segmentation faults?
>
>
> On Tue, 2012-01-03 at 16:29 -0500, Daniel Risacher wrote:
>> It's been a while since I looked at doing this, but IIRC it's fairly
>> dependent on the processing model that Apache is using.  Are you
>> mpm_prefork, or mpm_worker?
>>
>> Also, I found it was important to redirect stderr to /dev/null:
>>
>> sub play {
>>     system "/usr/bin/xmms -t 2> /dev/null";
>> }
>>
>>
>> On Tue, Jan 3, 2012 at 12:48 PM, David Booth <da...@dbooth.org> wrote:
>> > I am trying to run a shell command from a mod_perl2 response handler.
>> > It works properly for some number of HTTP requests, but sometimes it
>> > fails (somewhat randomly) and I see in my Apache2 error log that one of
>> > the Apache2 child processes has died with a segmentation fault.
>> > For example, /var/log/apache2/error.log shows:
>> >
>> > [Tue Jan 03 12:16:10 2012] [notice] child pid 3538 exit signal 
>> > Segmentation fault (11)
>> >
>> > Is this normal?  How does one normally run a shell command from a
>> > response handler?  I do not want to return the command's output to the
>> > client.
>> >
>> > Here is a trivial example response handler that exhibits this behavior:
>> >
>> > sub handler
>> > {
>> > my $r = shift || die;
>> > my $f = $ENV{DOCUMENT_ROOT} . "/date.txt";
>> > system("date >> $f");
>> > $r->internal_redirect("/date.txt");
>> > return Apache2::Const::OK;
>> > }
>> >
>> > Can anyone provide any guidance?  Does this work for you?
>> >
>> > Note that you may not notice the problem if you don't carefully watch
>> > the Apache2 error log (e.g., with "tail -f /var/log/apache2/error.log"),
>> > because Apache2 automatically spawns new children processes as needed,
>> > and client (such as Firefox or wget, though not curl) seem to
>> > automatically re-try the request when it fails, thus giving the illusion
>> > of succeeding.
>> >
>> > P.S. I have posted about this on perlmonks, but thus far have not found
>> > a solution:
>> > http://www.perlmonks.org/?node_id=945947
>> >
>> >
>> > --
>> > David Booth, Ph.D.
>> > http://dbooth.org/
>> >
>> > Opinions expressed herein are those of the author and do not necessarily
>> > reflect those of his employer.
>> >
>>
>>
>
> --
> David Booth, Ph.D.
> http://dbooth.org/
>
> Opinions expressed herein are those of the author and do not necessarily
> reflect those of his employer.
>

Reply via email to