环境

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

最后修改:2021 年 02 月 23 日 02 : 02 PM
如果觉得文章帮助了您,您可以随意赞赏。