Назад | Перейти на главную страницу

Перезапуск или остановка apache приводит к вечному ожиданию

У меня есть два простых приложения 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.