Estoy intentando ejecutar un proceso gunicorn_django en el supervisor pero siempre sale inmediatamente y aparece este error:
INFO exited: my_app (exit status 1; not expected)
INFO received SIGCLD indicating a child quit
INFO gave up: my_app entered FATAL state, too many start retries too quickly
El script de mi servidor se ve así:
#!/bin/bash
set -e
LOGFILE=/var/log/gunicorn/my_app.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3
USER=my-www-user
GROUP=my-www-user
cd /home/my-www-user/my_app
source /home/my-www-user/.virtualenvs/my_app/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
gunicorn_django -w $NUM_WORKERS --debug \
--user=$USER --group=$GROUP \
--log-level=debug --log-file=$LOGFILE 2>>$LOGFILE\
--pythonpath=my_app --settings=settings.active \
my_app.wsgi:application
Y mi configuración de supervisor se ve así:
[program:my_app]
directory=/home/my-www-user/my_app/
user=my-www-user
command=/home/my-www-user/my_app/server.sh
stdout_logfile=/var/log/supervisor/my_app.log
stderr_logfile=/var/log/supervisor/my_app-error.log
autostart=true
autorestart=true
Cuando entro su
en la my-www-user
cuenta, el servidor se inicia normalmente. Cuando lo hago, sudo supervisorctl start my_app
simplemente se cuelga hasta que hago CTRL-c, luego encuentro el error anterior en el archivo supervisord.log.
¿Alguien tiene idea de lo que me falta?
Respuesta1
Parece que he encontrado la solución. No puedo hacer que el supervisor ejecute el script de mi servidor sin privilegios, my-www-user
ya que tiene que escribir en archivos de registro, etc., lo que requiere más acceso. Entonces, la solución es ejecutar el servidor como root y dejar que gunicorn_django genere el proceso de trabajo comomy-www-user
[program:my_app]
user=root
; rest of config follows
Respuesta2
Tuve este error al intentar Celery
ejecutar y tuve exactamente el problema opuesto.
Cambié mi usuario de root
a www-data
y eso lo resolvió.
Respuesta3
En mi caso al tener el mismo error lo depuré hasta que encontré:
el disco estaba llenoy aumenté el espacio en disco para resolver esto.
(error estúpido, solución fácil; tal vez leer esto aquí ayude a alguien a no perder el tiempo)
También vinculando esta pregunta para otras opciones: