httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sorin Manolache <sor...@gmail.com>
Subject Re: Forcing Apache to exit on startup
Date Mon, 22 Oct 2012 20:05:35 GMT
On 2012-10-22 21:29, Joshua Marantz wrote:
> Hi,
>
> Our module has multiple confirmation parameters.  There is a case where if
> you have option A and option B, then you must also specify option C,
> otherwise Bad things can happen that are a lot easier to debug on startup
> than they are after the server is running.
>
> I know how to force 'apachectl' to exit with a nice error message if I
> don't like the value of option A or option B.  I can do that in the
> function-pointer I provide in my option-table by returning a non-null char*
> message.
>
> But in this case I want to exit nicely from the function I have registered
> with ap_hook_child_init, having noticed that option A and B are set but not
> C.  Is that possible?
>
> By "nicely", I mean that the user types:
>
> % sudo /etc/init.d/apachectl restart
> Error in pagespeed.conf: if you have option A and B specified, you must
> specify a value for option C.
>
> At that point either the server would not be running, or it would still be
> in whatever state it was previously in.
>
> Is this possible?
>
> Currently our solution is to log an error and call abort(), and it's not
> very nice!

Don't do it in child_init. I don't think the child can stop the server.

I think apachectl spawns apache with an appropriate -k argument (e.g. 
"apache2 -k stop") to start/stop/reload apache. However, I don't think 
that the child has sufficient privileges to stop the parent by exec'ing 
"apache2 -k stop". Nor can it send the apropriate signal to the parent.

But you can exit nicely in post_config, which is run (as root) after the 
conf is read but before the children are spawned. It suffices to return 
a non-ok code for apache to exit. I _think_, I'm not sure, that what you 
log in post_config does not go on the console but goes to the server 
log. But maybe there's a way to put the error message on the console too.

Sorin


Mime
View raw message