烧瓶 mod_wsgi 地址已在使用中 [重复]
Posted
技术标签:
【中文标题】烧瓶 mod_wsgi 地址已在使用中 [重复]【英文标题】:flask mod_wsgi address already in use [duplicate] 【发布时间】:2017-06-27 21:16:15 【问题描述】:我从过去 2 天开始尝试了所有方法。但没有什么能真正帮到我。
背景: 我按照this 在生产环境中安装了flask 应用程序,但我需要在vhost
文件中更改serverName
,所以我忘了杀死一个已经在运行的flask 应用程序/进程并进行了编辑相同的虚拟主机文件指向其他位置,几乎没有更改。
问题: 现在重启 apache 后,当我访问修改后的 serverName
时,我继续收到以下错误。
mod_wsgi (pid=1685): Target WSGI script '/var/www/html/machine/machine.wsgi' cannot be loaded as Python module., referer: http://dev.badiyajobs.com/
mod_wsgi (pid=1685): Exception occurred processing WSGI script '/var/www/html/machine/machine.wsgi'., referer: http://dev.badiyajobs.com/
Traceback (most recent call last):
File "/var/www/html/machine/machine.wsgi", line$
from run import app as application
File "/var/www/html/machine/assessment/run.py",$
app.run()
File "/usr/local/lib/python2.7/dist-packages/fl$
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.7/dist-packages/we$
inner()
File "/usr/local/lib/python2.7/dist-packages/we$
fd=fd)
File "/usr/local/lib/python2.7/dist-packages/we$
passthrough_errors, ssl_context, fd=fd)
File "/usr/local/lib/python2.7/dist-packages/we$
HTTPServer.__init__(self, (host, int(port)), $
File "/usr/lib/python2.7/SocketServer.py", line$
self.server_bind()
File "/usr/lib/python2.7/BaseHTTPServer.py", li$
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.7/SocketServer.py", line$
[self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 224, $
return getattr(self._sock,name)(*args)
error: [Errno 98] Address already in use
请任何人建议如何摆脱已经运行的应用程序。我已经尝试了很多关于杀死进程的事情,但注意到确实有效。
【问题讨论】:
假设你设置你的虚拟环境来隔离你的应用程序和依赖代码,你是否有一个在你的虚拟环境之外运行的应用程序可能会锁定一个套接字/端口?或者您是否有其他配置干扰您的主要配置? 不确定。我尝试通过更改大量ports
来启动app
,但每次都出现相同的错误。
要尝试的另一件事是...如果您启动一个没有其他应用程序运行的 VM,这可能有助于隔离问题。
我所有的应用程序都在系统级别上运行。我没有使用虚拟机。
它与杀死其他应用程序无关。您真正的问题是您在代码中的全局范围内有app.run()
。您需要通过检查是否是 __main__
脚本模块来保护它。在 mod_wsgi 下托管您的应用程序时,您不应该调用它,因为您不想运行 Flask Web 服务器。重复的原因是 Apache 是多进程的,并且会创建多个应用程序实例。
【参考方案1】:
杀死所有正在侦听该端口的进程的最简单方法是使用 fuser(1) 命令。例如,要查看在端口 80 上侦听 http 请求的所有进程(以 root 身份运行或使用 sudo):
fuser 80/tcp
如果你想杀死他们,那么只需添加'-k'选项
Source
【讨论】:
以上是关于烧瓶 mod_wsgi 地址已在使用中 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我触摸 wsgi 脚本时,带有 mod_wsgi 的烧瓶应用程序不会重新加载
Python 烧瓶、apache 和 mod_wsgi 应用程序不工作
Apache SetEnv 无法与 mod_wsgi 一起按预期工作