found - uWSGI/Flask/Python logs se detienen después de un tiempo
no python application found, check your startup logs for errors (2)
Tengo una configuración uWSGI / Flask utilizando registradores de Python. Aunque los registros solo de algunos trabajadores llegan a los registros y, después de algún tiempo, incluso aquellos dejan de aparecer. Mi hipótesis es que cuando uWSGI reinicia (clones) los trabajadores, el registro de alguna manera se rompe. ¿Algunas ideas?
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
Las aplicaciones habilitadas / app-0.ini y las aplicaciones habilitadas / app-1.ini se ven así:
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
También he intentado usar SysLogHandler
con el mismo resultado.
Lo que si puedo asegurar es que reiniciar uwsgi no debe detener el registro. Tengo el servidor nginx-uwsgi-django y reinicio mi servidor uwsgi todo el tiempo y mis registros nunca se detienen. A continuación se muestra el aspecto de mi archivo ini: es posible que pueda modificar su archivo ini de este modo y ver si funciona.
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
Y aquí es como reinicio mi uwsgi
kill -SIGHUP [pid id of your uwsgi master]
Tenga en cuenta que el comando que ha proporcionado para uwsgi utilizando el archivo ini solo debe usarse una vez para iniciar el servidor uwsgi. Cuando quiera reiniciar, le sugiero que anote el pid del maestro uwsgi usando
ps -ef | grep uwsgi
y ejecute el comando kill anterior.
No estoy seguro de que esto sea de ayuda en su caso, pero puede intentar usar el bifurcación de publicaciones en uWSGI.
El decorador de postfork
es justo el boleto. Puedes declarar múltiples tareas postfork. Cada función decorada se ejecutará en secuencia después de cada fork()
.
@postfork
def init_logging():
app.logger.addHandler(handler)
O puede especificar lazy-apps=true
en su uwsgi.ini
.
Para detalles: http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html y http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html