subprocess.Popen calling httpd reload never finishes

Albert Hopkins marduk at letterboxes.org
Wed Aug 18 18:37:22 CEST 2010


On Wed, 2010-08-18 at 06:58 -0700, Nan wrote:
> Ah, I'd been told that there would be no conflict, and that this was
> just reloading the configuration, not restarting Apache.
> 
> I do need the web app to instruct Apache to reload because just before
> this it's creating new VirtualHosts that need to be recognized.  Is
> there a better way to do this (e.g. to say "start doing this once I'm
> finished")?
> 
> I'm getting a status code and output from the call before the Django
> script stops executing... Is there a way to stop waiting for the
> process to complete once I have those? 

I have a wireless router with a built in web server.  Sometimes it needs
to "reload" it's config.  Basically what it's doing is rebooting the
entire router (I can see this if I'm actuall watching the router).  All
it is doing, I'm pretty sure, is calling some program that forks another
process and then exits the main program.  The forked process then
reboots the router.  Meanwhile before that happens the web server sends
a response. Basically in the response it sends an HTTP Refresh with x
number of seconds.  Presumably x is longer than the time it requires for
the router to reboot.  The router reboots, the browser refreshes and
viola.

You probably need to so something similar in that your request calls a
program that forks off and restarts apaches.  It should probably not do
so immediately so that your request has time to send a response with a
refresh header (but that shouldn't take long).  After a second or so,
apache will have restarted and the browser will have refreshed.

so (untested):

def reload(request):
    subprocess.call(['my_apache_reloader']) # this should fork and exit
    response = HttpResponse()
    response['Refresh']='3; url=%s' % reverse(home) # chk back in 3 secs
    return response

BTW There is a Django mailing list where this might be more appropriate
to discuss.

-a





More information about the Python-list mailing list