Gunicorn Supervisor启动错误

时间:2013-01-22 17:29:40

标签: django gunicorn supervisord

我已经跟着this tutorial两次了,但是在我运行它的第二台机器上,我得到了一个主管运行的gunicorn错误。当我告诉主管启动gunicorn使用:

$ sudo supervisorctl start gunicorn
gunicorn: ERROR (abnormal termination)

gunicorn_err.log重申了这一点:

Unknown command: 'run_gunicorn'
Type 'manage.py help' for usage.

主管配置如下:

[program:gunicorn]
command=/home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
directory=/home/ubuntu/<APPNAME>
user=www-data
autostart=true
autorestart=true
stdout_logfile = /var/log/supervisor/gunicorn.log
stderr_logfile = /var/log/supervisor/gunicorn_err.log

gunicorn.log是空的。我已经尝试将用户更改为ubuntu并在没有virtualenv的情况下运行(我的'默认'python环境也准备好了,因为它有所有必备软件包。)我甚至尝试删除gunicorn中变量赋值之间的空格。 CONF 实际上,如果我手动运行:

$ /usr/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
2013-01-22 19:20:33 [1231] [INFO] Starting gunicorn 0.17.2
2013-01-22 19:20:33 [1231] [INFO] Listening at: http://127.0.0.1:8000 (1231)
2013-01-22 19:20:33 [1231] [INFO] Using worker: gevent
2013-01-22 19:20:33 [1236] [INFO] Booting worker with pid: 1236
2013-01-22 19:20:33 [1237] [INFO] Booting worker with pid: 1237
2013-01-22 19:20:33 [1238] [INFO] Booting worker with pid: 1238
2013-01-22 19:20:33 [1239] [INFO] Booting worker with pid: 1239

与virtualenv python运行相同:

$ /home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
2013-01-22 19:21:53 [1246] [INFO] Starting gunicorn 0.17.2
2013-01-22 19:21:53 [1246] [INFO] Listening at: http://127.0.0.1:8000 (1246)
2013-01-22 19:21:53 [1246] [INFO] Using worker: gevent
2013-01-22 19:21:53 [1251] [INFO] Booting worker with pid: 1251
2013-01-22 19:21:53 [1252] [INFO] Booting worker with pid: 1252
2013-01-22 19:21:53 [1253] [INFO] Booting worker with pid: 1253
2013-01-22 19:21:53 [1254] [INFO] Booting worker with pid: 1254

当我可以使用任何python环境运行它时,主管启动gunicorn是否有可能无法找到'run_gunicorn'命令并且它有效?是'gunicorn',是INSTALLED_APPS

1 个答案:

答案 0 :(得分:1)

事实证明,这是一个环境变量,我在settings.py中得到的,在supervisord的开始枪声下不存在。

此外,环境变量错误被抑制,并且从未进入过gunicorn_err.log

当我将gunicorn.conf命令切换到:

command = /usr/local/bin/gunicorn_django -w 4 -k gevent

我可以在gunicorn_err.log中看到更清晰的错误

    raise KeyError(key)
KeyError: 'AWS_STORAGE_BUCKET_NAME'
2013-01-22 22:51:09 [2290] [INFO] Worker exiting (pid: 2290)

为了解决这个问题,我只是没有使用环境变量,使用不同的方法得到变量。它工作了然后我恢复到原来的virtualenv run_gunicorn命令

command=/home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent

如果继续在设置中使用环境变量很重要,请查看supervisord-configuration,似乎有办法为supervisord执行的应用程序配置键/值环境变量对。