2016-10-31 5 views
2

gunicorn으로 내 플라스크 응용 프로그램을 배포하고 gunicorn을 사용하여 내 플라스크 응용 프로그램을 시작할 때 정상적으로 작동합니다. 내가 gunicorn을 볼 관리자를 사용하여 변경할 때, 나는 내 웹을 방문 할 수 있지만 관리자는 이러한 로그를 제공합니다감독관 gunicorn flask 오류

2016-10-31 17:49:49,967 INFO supervisord started with pid 32949 
2016-10-31 17:49:50,970 INFO spawned: 'vservice' with pid 32952 
2016-10-31 17:49:51,971 INFO success: vservice entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 
2016-10-31 17:49:56,285 INFO exited: vservice (exit status 1; not expected) 
2016-10-31 17:49:57,287 INFO spawned: 'vservice' with pid 32955 
2016-10-31 17:49:58,289 INFO success: vservice entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 
2016-10-31 17:50:02,605 INFO exited: vservice (exit status 1; not expected) 
2016-10-31 17:50:03,608 INFO spawned: 'vservice' with pid 32960 
2016-10-31 17:50:04,609 INFO success: vservice entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 
2016-10-31 17:50:08,924 INFO exited: vservice (exit status 1; not expected) 
2016-10-31 17:50:09,926 INFO spawned: 'vservice' with pid 32965 
2016-10-31 17:50:10,927 INFO success: vservice entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 

및 관리자는 다음과 같이 stderrlog :

Error: Already running on PID 30874 (or pid file 'log/gunicorn.pid' is stale) 

을 여기에 내 gunicorn 설정 파일입니다 :

[program:vservice] 
command=/data/server/venv/bin/gunicorn -c /data/server/gun.py manager:app 
directory=/data/server/ 
stdout_logfile=/data/supervisor/log/stdout.log 
stderr_logfile=/data/supervisor/log/stderr.log 
:

import gevent.monkey 
import multiprocessing 

gevent.monkey.patch_all() 

bind = '0.0.0.0:9000' 

loglevel = 'error' 
logfile = 'log/debug.log' 
accesslog = 'log/access.log' 
access_log_format = '%(h)s %(t)s %(U)s %(q)s' 
errorlog = 'log/error.log' 

pidfile = 'log/gunicorn.pid' 

# number of processes 
workers = multiprocessing.cpu_count() * 2 + 1 
# number of threads of per process 
threads = multiprocessing.cpu_count() * 2 
worker_class = 'gevent' 

여기 내 관리자의 설정 파일입니다

내가 gunicorn -c gun.py 관리자를 사용할 때 : app, 내 응용 프로그램은 정상적으로 작동하지만 감독자를 사용하여 실행하면 위와 같은 오류가 발생하며 내 웹을 방문 할 수 있으며 내 앱처럼 보입니다. 감독이 제시 한 오류의 의미는 무엇입니까? 배포에 나쁜 영향을 미치나요?

감사합니다.

답변

0

여기에서 아이디어를 얻었습니다. https://github.com/benoitc/gunicorn/issues/520#issuecomment-236301509

bash 스크립트를 사용하여 gunicorn을 실행 해보십시오.

[program:vservice] 
command=/path-to-bash-script/gunicorn.sh 
directory=/data/server/ 
stdout_logfile=/data/supervisor/log/stdout.log 
stderr_logfile=/data/supervisor/log/stderr.log 

이 gunicorn 응용 프로그램

#!/bin/sh 
exec /data/server/venv/bin/gunicorn -c /data/server/gun.py manager:app 

의 exec 명령을 실행하고 gunicorn 설정 파일에서 라인 pidfile = 'log/gunicorn.pid'을 빼앗아 당신의 gunicorn.sh을 설정처럼 관리자 설정 파일이 보일 것입니다.

bash 스크립트는 감탄사가 아닌 감독 대상이기 때문입니다.

+0

나는 이것을 시도 할 것이다. 감사 – Allan