Подтвердить что ты не робот

Журналы uWSGI/Flask/Python останавливаются через некоторое время

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

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

app-enabled/app-0.ini и apps-enabled/app-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 с тем же результатом.

4b9b3361

Ответ 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

Ответ 2

Я могу вам точно сказать, что перезапуск 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 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. Когда вы хотите перезапустить, я предлагаю вам записать pid мастера uwsgi с помощью

 ps -ef | grep uwsgi 

и запустите приведенную выше команду kill.

Ответ 3

Риск другой возможной причины для остановки регистрации через некоторое время. uWSGI может быть настроен на удаление привилегий (что является хорошей идеей). Однако после этого события logto2 настройка logto2 [0]:

logto=/var/www/app.com/logs/uwsgi/app.com-0.log
logto2=/var/www/app.com/logs/uwsgi/app.com-normaluser-0.log

Надеюсь, это кому-нибудь поможет.

[0] https://uwsgi-docs.readthedocs.io/en/latest/Options.html#logto2