主管,Gunicorn(退出状态 127;预计不会)

Supervisord, Gunicorn (exit status 127; not expected)

我希望使用 supervisor 来监控 运行 gunicorn 服务器。

当我运行:

/usr/bin/gunicorn app.wsgi:application -c config.conf

有效。

但是我的主管 conf 文件中的完全相同的命令不起作用。有什么解释吗?

supervisor.conf

[supervisord]
[group:app]
programs=gunicorn_app
[program:gunicorn_app]
environment=PYTHONPATH=usr/bin
command=/usr/bin/gunicorn app.wsgi:application -c gunicorn.conf.py
directory=~/path/to/app

autostart=true
autorestart=true

environment=LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8"

我收到这样的错误:

2016-05-31 22:53:34,786 INFO spawned: 'gunicorn_app' with pid 18763
2016-05-31 22:53:34,789 INFO exited: gunicorn_app (exit status 127; not expected)
2016-05-31 22:53:35,791 INFO spawned: 'gunicorn_app' with pid 18764
2016-05-31 22:53:35,795 INFO exited: gunicorn_app (exit status 127; not expected)
2016-05-31 22:53:37,798 INFO spawned: 'gunicorn_app' with pid 18765
2016-05-31 22:53:37,802 INFO exited: gunicorn_app (exit status 127; not expected)
2016-05-31 22:53:40,807 INFO spawned: 'gunicorn_app' with pid 18766
2016-05-31 22:53:40,810 INFO exited: gunicorn_app (exit status 127; not expected)

我知道退出代码 127 表示 "command not found" 但我可以在命令行上执行完全相同的命令。

尽量使用绝对路径。 /home/path/to/app 不是~/path/to/app

如您所说,此代码表示 "command not found",这可能是以下任一情况的结果:

  1. 主管无法找到配置文件
  2. 配置错误

无论如何,我会推荐你​​:

案例 1:

确保你提供绝对路径(完整路径)路径给你 gunicorn.conf.py 文件(.e.g. /home/user/path/to/gunicorn.conf.py)

案例 2:

重新访问您的主管配置文件并尝试确定可能出现错误的位置。这样做的最佳方法是找到日志文件并打开它以验证原因。为方便起见,我建议将以下内容添加到您的 supervisord.conf 文件中:

[program:gunicorn]
# where the configuation file is located on the /home/<user>/path/to/configuration_file
command=/usr/local/bin/gunicorn app.wsgi:application -c /home/<user>/path/to/gunicorn.conf.py  
directory=~/path/to/app
autostart=true
autorestart=true

#add this setting to log error
stderr_logfile=/var/log/gunicorn.err.log
stdout_logfile=/var/log/gunicorn.out.log

environment=LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8"

注意:我在这里所做的假设是您想要部署或 运行 使用 gunicorn 的 django 应用程序。午餐服务器时遇到的任何错误都可以在 gunicorn.err.log 文件中进行验证。