我在Ubuntu服务器上有一个django应用程序,该服务器使用gunicorn运行并使用supervisor启动/停止。我正在将其迁移到运行相同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秒)然后退出一样。它不会向控制台打印任何内容,也不会在日志文件中添加任何内容。
答案 0 :(得分:2)
通过以root身份逐行运行/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密钥和数据库密码试用环境变量。所以我将这些转换为实际值。然后跑了sudo supervisorctl start beta
,它开始很好。