Estou tentando executar um processo gunicorn_django no supervisor mas ele sempre sai imediatamente, dando este erro:
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
Meu script do servidor é assim:
#!/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
E minha configuração de supervisor é assim:
[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
Quando su
entro na my-www-user
conta o servidor inicia normalmente. Quando faço sudo supervisorctl start my_app
isso simplesmente trava até que eu faça CTRL-c, então encontro o erro acima no arquivo supervisord.log.
Alguém tem alguma idéia do que estou perdendo?
Responder1
Parece que encontrei a solução. Não posso fazer com que o supervisor execute meu script de servidor como sem privilégios, my-www-user
pois ele precisa gravar em arquivos de log, etc., o que requer mais acesso. Portanto, a solução é executar o servidor como root e deixar o gunicorn_django gerar o processo de trabalho comomy-www-user
[program:my_app]
user=root
; rest of config follows
Responder2
Eu tive esse erro ao tentar Celery
executar e tive exatamente o problema oposto.
Mudei meu usuário de root
para www-data
e isso resolveu.
Responder3
No meu caso, tendo o mesmo erro, depurei até descobrir:
o disco estava cheioe aumentei o espaço em disco para resolver isso.
(erro estúpido, solução fácil - talvez ler isso aqui ajude alguém a não perder tempo)
também vinculando esta questão para outras opções: