2015-06-17 3 views
18

У меня есть настройка uWSGI/Flask с использованием регистраторов python. Хотя журналы только от некоторых работников доходят до журналов, и через некоторое время даже те перестают появляться вообще. Моя гипотеза заключается в том, что когда uWSGI перезапускает (клонирует) работников, регистрация как-то ломается. Есть идеи?Запуск uWSGI/Flask/Python через некоторое время

app/server.py:

app = Flask(...) 
handler = logging.StreamHandler() 
app.logger.addHandler(handler) 
app.run() 

uWSGI:

uwsgi --emperor /etc/uwsgi/apps-enabled/*.ini --die-on-term --uid www-data --gid www-data --logto /var/www/app.com/logs/uwsgi/emperor.log --socket /tmp/uwsgi/emperor.sock --enable-threads --master --single-interpreter --log-reopen --chmod-socket=770 

приложений с поддержкой/приложение-0.ini и приложения с поддержкой/приложение-1.ini выглядеть следующим образом:

module=server:app 
enable-threads=true 
single-interpreter=true 
master=true 
chdir=/var/www/app.com/app 
env=APPLICATION_ENVIRONMENT=production 
venv=/var/www/app.com/virtualenv 

logto=/var/www/app.com/logs/uwsgi/app.com-0.log 
log-reopen=true 
chmod-socket=770 
buffer-size=65535 

lazy-apps=true 
max-requests=5000 
heartbeat=15 

for=0 1 2 3 4 5 6 7 
socket=/tmp/uwsgi/app.0.%(_).sock 
endfor= 

processes=8 

map-socket=0:1 
map-socket=1:2 
map-socket=2:3 
map-socket=3:4 
map-socket=4:5 
map=socket=5:6 
map=socket=6:7 
map=socket=7:8 

Я также попытался использовать SysLogHandler с тем же результатом.

+0

Я испытываю такую ​​же проблему. Через некоторое время ничего не регистрируется. Я использую колбу/uwsgi/nginx. –

+0

привет, так вам удалось решить эту проблему? столкнулись с той же проблемой, что и вчера, и никуда не денутся! –

+0

@ bool.dev, я до сих пор не нашел решения. Наконец вернулось к ведению журнала uwsgi по умолчанию. –

ответ

0

Я могу вам точно сказать, что перезапуск uwsgi не должен прерывать регистрацию. У меня есть сервер nginx-uwsgi-django, и я все время перезапускаю сервер uwsgi, и мои журналы никогда не останавливаются. Вот как выглядит мой ini-файл: возможно, вы можете настроить ваш ini-файл в соответствии с этим и посмотреть, работает ли он.

1 #mysite_uwsgi.ini 
2 [uwsgi] 
3 
4 # Django-related settings 
5 # the base directory (full path) 
6 chdir   = /home/user/bdapps_stage 
7 # Django's wsgi file 
8 module   = mysite.wsgi:application 
9 # the virtualenv (full path) 
10 home   = /home/user/.conda/envs/mysite_env/ 
11 
12 # process-related settings 
13 # master 
14 master   = true 
15 # maximum number of worker processes 
16 processes  = 3 
17 # maximum number of threads to use 
18 # threads 
19 # the socket (use the full path to be safe 
20 socket   = /home/user/mysite/mysite.sock 
21 # ... with appropriate permissions - may be needed 
22 chmod-socket = 666 
23 #set the sockets listen queue size 
24 #listen 
25 # clear environment on exit 
26 vacuum   = true 

А вот как я перезагрузить uwsgi

kill -SIGHUP [pid id of your uwsgi master] 

Пожалуйста, обратите внимание, что команда, которую вы предоставили для uwsgi с помощью INI-файл должен быть использован только один раз, чтобы запустить сервер uwsgi. Если вы хотите, чтобы перезагрузить, я предлагаю вам записать ИДП мастера uwsgi с помощью

ps -ef | grep uwsgi 

и запустить выше команду убить.

1

Я не уверен, что это поможет в вашем случае, но вы можете попытаться использовать post forking в uWSGI.

Декоратор postfork - это только билет. Вы можете объявить несколько заданий postfork. Каждая оформленная функция будет выполняться последовательно после каждого fork().

@postfork 
def init_logging(): 
    app.logger.addHandler(handler) 

Или вы можете указать lazy-apps=true в вашем uwsgi.ini.

Для получения дополнительной информации: http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html и http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

Смежные вопросы