我在 Ubuntu 服务器上有一个 django 应用程序,它使用 gunicorn 运行并由主管启动/停止。我正在将它迁移到运行相同 Ubuntu 服务器操作系统的新服务器。到目前为止,当我尝试与主管一起启动它时,它一直运行良好。当我尝试启动它时,它会以 ERROR (abnormal termination)
退出我在新服务器上使用与旧服务器完全相同的配置文件,这真的让我很困扰,为什么它不能在新服务器上运行......我将把我的一些配置放在下面以及其中的一部分主管日志。/etc/supervisor/supervisor.conf
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0766 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
loglevel=debug
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
/etc/supervisor/conf.d/beta.conf
[program:beta]
command = /var/www/beta/myapp/bin/gunicorn_start
user = eli
stdout_logfile = /var/web-data/logs/beta/gunicorn_supervisor.log
redirect_stderr = true
/var/www/beta/myapp/bin/gunicorn_start
#!/bin/bash
source /var/www/beta/env/bin/activate
exec gunicorn -c /var/www/beta/myapp/bin/gunicorn_config.py myapp.wsgi
/var/www/beta/myapp/bin/gunicorn_config.py
command = '/var/www/beta/env/bin/gunicorn'
pythonpath = '/var/www/beta/myapp'
bind = '127.0.0.1:9000'
workers = 1
user = 'eli'
/var/log/supervisor/supervisord.log
http://pastebin.com/fAGdJMKg/var/web-data/logs/beta/gunicorn_supervisor.log
空的我的下一步是把新服务器擦干净,然后从头开始,看看这是否能解决我的问题。这真的让我很困扰,为什么两台配置完全相同的服务器,一台工作,另一台不工作。
我还尝试更改套接字文件的位置以及添加
user=eli
到[supervisord]
阻止无济于事。最后,如果我运行
/var/www/beta/myapp/bin/gunicorn_start
从命令行作为 eli
它会运行,我可以访问我的网站。然而当我 sudo su
然后运行它,它会像运行一样暂停(〜1秒)然后退出。它不会向控制台打印任何内容,也不会向日志文件添加任何内容。
最佳答案
通过运行 /var/www/beta/myapp/bin/gunicorn_start
解决了问题。逐行作为根。第一个来源工作正常,但第二行出现问题。
然后我尝试运行 gunicorn -c /var/www/beta/myapp/bin/gunicorn_config.py myapp.wsgi
这是做同样的事情,但仍然没有显示任何错误。于是我跑了gunicorn -c /var/www/beta/myapp/bin/gunicorn_config.py myapp.wsgi --preload
并发现它正在为我的设置中的环境变量引发 KeyError。然后这一切都说得通了。当我以 root 身份运行它时,它没有与我的普通用户相同的环境变量。
并且授予这是我的两台服务器之间的唯一区别。我决定为我的 django key 和数据库密码尝试环境变量。所以我将它们切换为它们的实际值。然后运行 sudo supervisorctl start beta
它开始非常好。
关于python - 主管没有启动 gunicorn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255133/