环境
CentOS Linux release 7.7.1908 (Core)
Python 3.7.7
django 2.2.10
uWSGI 2.0.19.1
/www/mysite uwsgi www 权限 754
报错
uWSGI worker 5 screams: UAAAAAAH my master disconnected: i will kill myself !!!
描述
身份:root
部分 uWSGI 配置文件:
[uwsgi]
# 运行 uwsgi 所需使用的用户和用户组
uid=uwsgi
gid=www
#uid=root
#gid=root
# http 入口,非 root 用户,不能绑定 80 443 等特权端口,否则会报错 bind(): Permission denied。
http = 0.0.0.0:29001
# django 项目目录:含 manager.py
chdir = /www/mysite
# mysite目录:含有 settings.py
wsgi-file = %(chdir)/mysite/wsgi.py
# 静态文件映射 /www/mysite/static
static-map = /static=%(chdir)/static
#省略...
# uWSGI 内部统计数据作为 JSON 存储,使用 telnet 访问。
stats = :29002
#stats = %(chdir)/statsock
原因
这里仅已 stats 为例,其他问题也可能会出现此错误,需要根据配置文件,目录权限慢慢排查。
在使用 stats 后,uWSGI 运行配置文件后,默认产生的 stats 的 sock 在 uid 用户无法访问的目录内,造成无法读取。
解决
方式一:指定 stats statcock 的位置到 uid 用户可以访问的位置,例如:
# uWSGI 内部统计数据作为 JSON 存储,使用 telnet 访问。
stats = :29002
stats = %(chdir)/statsock
方式二:不使用 uWSGI 提供的 stats,即注释 stats
# uWSGI 内部统计数据作为 JSON 存储,使用 telnet 访问。
#stats = :29002
其他错误
http 入口,非 root 用户,不能绑定 80 443 等特权端口,否则会报错:
uwsgi not use root is error bind(): Permission denied
参考
uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StatsServer.html