Eu tenho dois aplicativos WSGI simples em execução em mod_wsgi
e apache2
(worker) em um servidor de desenvolvimento de teste. Não há mod_python
nesta máquina.
A configuração do WSGI é a seguinte
WSGIDaemonProcess tops stack-size=524288 maximum-requests=5
WSGIScriptAlias /tops /home/ubuntu/tops-cloud/tops.wsgi
<Directory /home/ubuntu/tops-cloud>
WSGIProcessGroup tops
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
WSGIDaemonProcess flaskal maximum-requests=5
WSGIScriptAlias /c14 /home/ubuntu/c14/flaskal/flaskal.wsgi
<Directory /home/ubuntu/c14/flaskal>
WSGIProcessGroup flaskal
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
Se eu fizer alterações na configuração (por exemplo, número de solicitações máximas, etc), preciso reiniciar o servidor da Web, por isso esperaria que um simples sudo service apache2 restart
faça o que eu preciso.
Em vez disso, ele nunca termina "aguardando", assim:
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ..................................................
até que eu faça CTRL-C
. Nesse ponto, a única maneira de retomar um servidor em funcionamento é para matar o processo e reiniciá-lo, não muito conveniente. O mesmo acontece com o comando stop
.
Os logs de erro no nível "debug" mostram as seguintes linhas após uma falha na reinicialização
[Wed Nov 14 21:55:19 2012] [notice] caught SIGTERM, shutting down
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Shutdown requested 'tops'.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Stopping process 'tops'.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Destroying interpreters.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Cleanup interpreter ''.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Terminating Python.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Shutdown requested 'flaskal'.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Stopping process 'flaskal'.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Destroying interpreters.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Cleanup interpreter ''.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Terminating Python.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=8920): Python has shutdown.
[Wed Nov 14 21:55:19 2012] [info] mod_wsgi (pid=9047): Python has shutdown.
Se eu tentar reiniciar novamente (com o processo ainda em execução), recebo o seguinte erro:
* Restarting web server apache2 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
Infelizmente, o log de erros do Apache não tem nada.
Quando o apache2 está sendo executado corretamente, os dois aplicativos funcionam sem nenhum problema.