我正在使用 Gunicorn、Nginx 和 Supervisord 部署 Flask 应用程序。这是我的应用程序配置文件:
[program:apwd-flask]
command = /home/aaron/dev/apwd-flask/venv/bin/gunicorn --workers=3 wsgi:app -b localhost:8000
directory = /home/aaron/dev/apwd-flask
environment = PATH="/home/aaron/dev/apwd-flask/venv/bin"
user = nginx
autostart = true
autorestart = true
redirect_stderr = true
当我通过指定应用程序名称 apwd-flask 直接从命令行启动它时,它工作正常。
但是,在启动时或仅输入不带参数的通用 sudo managerctl 命令时它会失败并记录以下内容:
2016-01-23 11:06:43,550 INFO spawnerr: can't find command '/home/aaron/dev/apwd-flask/venv/bin/gunicorn'
2016-01-23 11:06:44,551 INFO spawnerr: can't find command '/home/aaron/dev/apwd-flask/venv/bin/gunicorn'
2016-01-23 11:06:46,556 INFO spawnerr: can't find command '/home/aaron/dev/apwd-flask/venv/bin/gunicorn'
2016-01-23 11:06:49,742 INFO spawnerr: can't find command '/home/aaron/dev/apwd-flask/venv/bin/gunicorn'
2016-01-23 11:06:49,742 INFO gave up: apwd-flask entered FATAL state, too many start retries too quickly
我最初在配置文件中没有 environment = PATH... 指令,但经过一番研究后,我认为这可能是解决问题的方法(即使命令已经是完整路径)。但这并没有改变结果。
编辑:我开始将其归结为启动时我的主文件夹出现了异常。我的 nginx(用作此 gunicorn 服务器的反向代理)在启动时无法启动,并且 nginx 日志抱怨它无法找到我的日志文件 - 该文件也在主目录中。然后我只需从 CLI 启动 nginx,它就可以顺利启动。考虑到这可能有某种关联,我随后从 CLI 使用 reload 指令(仅)运行了 Supervisor,这也有效 - 服务器启动时没有出现任何问题。这几乎就像我的主文件夹或其中的子文件夹在系统启动时无法访问,并且这两个服务器尝试启动。
提前致谢。Aaron