Apache2.4部署Django运行runmodwsgi报signal无SIGHUP属性怎么解决
报错根因
SIGHUP是类Unix操作系统(Linux、macOS等)专属的进程信号,Windows系统的Python标准库signal模块没有定义该属性,该报错通常出现在Windows环境下执行带重载参数的runmodwsgi命令时。
解决方案
场景1:本地开发调试
- 优先使用Django自带的开发服务器,执行命令
python manage.py runserver即可满足开发调试需求,无需提前使用mod_wsgi运行项目。 - 如果确实需要用mod_wsgi本地测试,去掉
--reload-on-changes参数即可避免触发信号注册逻辑,执行命令:python manage.py runmodwsgi
场景2:必须在Windows下使用重载功能
手动修改报错指向的mod_wsgi\server\management\commands\runmodwsgi.py文件,在第158行的信号注册逻辑前增加系统判断,兼容Windows环境:
# 原有代码:signal.signal(signal.SIGHUP, handler) # 替换为下方逻辑 import os if os.name != "nt": # nt对应Windows系统 signal.signal(signal.SIGHUP, handler)
修改后保存文件,重新执行原命令即可正常运行。
场景3:生产环境部署
Apache+mod_wsgi的服务组合在类Unix系统下稳定性更高,建议直接将项目部署到Linux或macOS服务器,天然支持SIGHUP信号,不会触发该报错。
内容的提问来源于stack exchange,提问作者Shankz
相关产品推荐
相关产品推荐

