Python中supervisor部署问题:单独用gunicorn启动正常,加上supervisor后跳转报500错误,求解决方案
部署完 gunicorn+ngnix+supervisor 后可以进入 /user/的登录界面,但是输入表单后,点登录跳转,就会直接
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
不用 supervisor,直接在项目目录用 gunicorn 启动就没问题。
gunicrorn 日志如下,但不知道怎么能看到更详细点的日志…
127.0.0.1 - - [05/Jun/2017:09:41:36 +0800] “GET / HTTP/1.0” 302 219 “-”
127.0.0.1 - - [05/Jun/2017:09:41:36 +0800] “GET /user/ HTTP/1.0” 200 3902 “-”
127.0.0.1 - - [05/Jun/2017:09:41:36 +0800] “GET /static/images/icons.png HTTP/1.0” 404 233 “http://XXX.XX.XXX.238/static/css/login_style.css”
127.0.0.1 - - [05/Jun/2017:09:41:40 +0800] “POST /user/login HTTP/1.0” 500 291 “http://XXX.XX.XXX.238/user/”
supervisor 配置如下
[program:tweet-demo]
command=/usr/local/bin/gunicorn wsgi --worker-class=gevent --bind 0.0.0.0:8001 --pid /tmp/tweet-demo.pid
directory=/home/ubuntu/demo/tweet-demo
求解救…
Python中supervisor部署问题:单独用gunicorn启动正常,加上supervisor后跳转报500错误,求解决方案
不用 nginx 直接访问 8001,也会这样吗?
我遇到类似问题,通常是因为supervisor的环境变量或工作目录配置不对。检查这几个关键点:
- 环境变量问题 - supervisor默认不会继承shell的环境变量
# 在supervisor配置中显式设置环境变量
[program:myapp]
environment=PYTHONPATH="/path/to/project",PATH="/usr/bin",DJANGO_SETTINGS_MODULE="myapp.settings"
- 工作目录配置 - 确保supervisor的工作目录与gunicorn一致
[program:myapp]
directory=/path/to/your/project # 这个很重要!
command=/path/to/gunicorn myapp.wsgi:application -b 0.0.0.0:8000
- 用户权限问题 - supervisor以不同用户运行时可能没有文件访问权限
[program:myapp]
user=www-data # 确保与gunicorn运行用户一致
- 完整的supervisor配置示例:
[program:myapp]
command=/path/to/venv/bin/gunicorn myapp.wsgi:application -b 0.0.0.0:8000
directory=/path/to/your/project
user=www-data
numprocs=1
autostart=true
autorestart=true
environment=PYTHONPATH="/path/to/your/project",DJANGO_SETTINGS_MODULE="myapp.settings"
stdout_logfile=/var/log/myapp.log
stderr_logfile=/var/log/myapp_error.log
快速排查步骤:
- 查看supervisor日志:
sudo tail -f /var/log/supervisor/supervisord.log - 查看应用错误日志:
sudo supervisorctl tail myapp stderr - 对比直接运行gunicorn和supervisor运行的环境差异
建议: 重点检查环境变量和工作目录配置是否与直接运行gunicorn时完全一致。
是的,奇怪的是注册功能倒是没问题…
楼主确定 gunicorn 是正常运行的么,我印象中旧版本的 supervisor 运行 python 程序有 Bug 来着。
你看下是不是这个问题:
···
#!/usr/bin/env bash
cd /var/www/monmar
export $(cat .env) && exec .venv/bin/gunicorn config.wsgi -c deploy/gunicorn.conf.py
···
Please pay attention that we’re not calling .venv/bin/gunicorn directly, but wrapping it with exec. If you don’t do that, your Gunicorn program won’t be supervisored, and you won’t be able to stop and restart it properly.
Ref: https://samoylov.eu/2016/08/31/deploying-django-with-gunicorn-and-supervisor/
论日志的重要性
谢谢!好像确实是这个问题,之前输出的日志是空的,这样跑了一下终于看到具体的异常了。
为啥不直接用 systemd 启动
说得好,我一般也是直接用 systemd 的 :)
我是超讨厌超级猥琐这种画蛇添足的东西,在它可以作为正式的 init 之前,多出的层级意味着损失效率和徒增故障点,systemd 的日志已经相当完善了,至于有些人要的 web 控制台,也有相应组件

