У меня есть два простых приложения WSGI, работающих поверх mod_wsgi
и apache2
(worker) на тестовом сервере разработки. Здесь нет mod_python
на этой машине.
Конфигурация WSGI выглядит следующим образом
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>
Если я внесу изменения в конфигурацию (например, количество максимальных запросов и т. Д.), Мне нужно перезапустить веб-сервер, поэтому я ожидаю, что простой sudo service apache2 restart
делает то, что мне нужно.
Вместо этого оно никогда не заканчивается "ожиданием", например:
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ..................................................
пока я просто не сделаю CTRL-C
. В этот момент единственный способ возобновить работающий сервер - убить процесс и перезапустить его, что не очень удобно. То же самое происходит с stop
команда.
Журналы ошибок на уровне «отладки» показывают следующие строки после неудачного перезапуска.
[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.
Если я затем попытаюсь перезапустить еще раз (пока процесс все еще запущен), я получаю следующую ошибку:
* 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.
К сожалению, в журнале ошибок Apache ничего нет.
Когда apache2 работает правильно, оба приложения работают без проблем.
В некоторых случаях запись журнала не будет записана на диск (если журналы не существуют или права доступа неверны). Лучший способ диагностировать ошибку - попытаться запустить Apache с помощью следующей команды strace -Ff apachectl start
.