我目前正在重建我的 vps,我想使用 Supervisor 来管理我的 gunicorn/wsgi django 进程。问题是,Supervisor 不断退出进程:
2010-07-23 14:54:40,575 INFO supervisord started with pid 31391
2010-07-23 14:54:41,582 INFO spawned: 'projectx' with pid 31395
2010-07-23 14:54:41,691 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:42,695 INFO spawned: 'projectx' with pid 31401
2010-07-23 14:54:42,801 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:44,806 INFO spawned: 'projectx' with pid 31404
2010-07-23 14:54:44,912 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:47,917 INFO spawned: 'projectx' with pid 31408
2010-07-23 14:54:48,022 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:49,023 INFO gave up: projectx entered FATAL state, too many start retries too quickly
这是我正在使用的配置:
[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
user=myuser
autostart=true
autorestart=true
我已经仔细检查过,当正确生成时,gunicorn_django 确实返回状态 0。
我尝试在配置中明确添加 exitcodes=0,2,但这似乎也没有什么区别。看起来进程已经正确生成,但主管认为没有。
答案1
如果 gunicorn_django 正在将自己作为守护进程,那么它就不是程序管理器所设计用来管理的那种程序。管理器希望其所监督的程序在前台运行,以便它可以监视它们是否已退出。
答案2
好的,经过一番思考后,我发现这与用户有关。我尝试以特定用户身份运行我的子进程。删除该行后(请参阅下面的配置),一切正常。
Gunicorn 配置:
bind = "127.0.0.1:3305"
workers = 2
主管配置:
[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
; set the user here instead of in the gunicorn config.
user=user
autostart=true
autorestart=unexpected
stdout_logfile=/path/to/project/logs/project.log
redirect_stderr=true
exitcodes=1
答案3
当我尝试在主管下执行 http 守护程序时遇到了类似的错误。
通过删除旧的 pid 文件来修复:httpd_pid