Есть ли способ безопасно перезапустить процессы mod_wsgi по запросу, возможно, запущенные на нескольких машинах? Я обслуживаю приложение django с mod_wsgi
в режиме демона с apache:
WSGIDaemonProcess myapp user=user group=user processes=30 threads=1
WSGIProcessGroup myapp
Я прочитал предложения в mod_wsgi
документация но ни одно из предложенных решений не работает для меня:
mod_wsgi
Файл конфигурации делает фокус безопасно, но как это сделать на нескольких машинах?В идеале мы должны иметь возможность перезапустить процессы одним действием. Какие-либо предложения?
Примечание: мне нужно запустить несколько процессов в одном потоке. Мое приложение не является потокобезопасным.
Изменить, я могу сделать это из Puppet, если это единственный вариант, который у меня есть. но я предпочитаю, если есть способ сделать это из специального защищенного представления. Я думаю, что это тривиально сделать на одной машине, но не на нескольких
большое спасибо
Нет разницы между (2) и (3) в том, как выполняются существующие запросы. Отправка kill SIGINT не просто завершает процесс, но запускает такое же упорядоченное завершение работы, как и (2). Фактически, (2) внутренне просто отправляет SIGINT самому себе. Важно определить процессы, которым нужно послать SIGINT. Для этого вы должны использовать опцию 'display-name' для WSGIDaemonProcess, чтобы они назывались в выводе 'ps' и их было легче идентифицировать.
Прикосновение к файлу конфигурации mod_wsgi помогает безопасно, но как это сделать на нескольких машинах?
Я думаю, это решает проблему того, как запустить mod_wsgi для перезагрузки скриптов очень элегантным способом. Для распределения этого действия по нескольким хостам одновременно рекомендую использовать такую утилиту, как пшш (параллельный ssh). Его настройка не должна быть проблемой.
Прикосновение к файлу конфигурации mod_wsgi помогает безопасно, но как это сделать на нескольких машинах?
Это можно решить, используя общую кодовую базу, например, при монтировании NFS.
В качестве альтернативы это должно быть частью вашего процесса контроля версий / развертывания.
Вы используете контроль версий в настоящее время?
Если это так, создайте процесс, обеспечивающий обновление файла. Вы можете автоматизировать это, например, с помощью ловушки после фиксации.
Как вы развертываете свой код?
Подумайте об использовании чего-то вроде Capistrano или Кукольный и включите действие в рецепт развертывания для обновления этого файла.