我运行我的烧瓶应用程序,它运行良好,但到应用程序停止时和我的uwsgi日志
probably another instance of uWSGI is running on the same address (127.0.0.1:9002).
bind(): Address already in use [core/socket.c line 764]
当我运行touch touch_reload时,app再次正常运行。 我在服务器上运行其他任何可能接受套接字的东西。
我的conf:
nginx
server {
listen 80;
....
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
}
....
}
server {
listen 80;
....
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9003;
}
....
}
uwsgi:
chdir = /var/www/../
module = wsgihandler
socket = 127.0.0.1:9003
wsgi-file = app/__init__.py
callable = app
master = true
chmod-socket = 664
uid = root
gid = root
processes = 4
socket-timeout = 180
post-buffering = 8192
max-requests = 1000
buffer-size = 32768
logto = /var/www/.../log/uwsgi.log
touch-reload = /var/www/.../touch_reload
答案 0 :(得分:12)
此错误表示端口9002已被其他进程使用。根据您的日志,该过程是uwsgi probably another instance of uWSGI is running on the same address (127.0.0.1:9002)
。可能是当您停止使用应用程序时未释放端口,并且在运行touch touch_reload
时重新启动了wsgi服务器。您可以尝试以下命令来释放端口。
sudo fuser -k 9002/tcp
如果这是一个tcp进程并再次重新启动wsgi服务器以查看该端口是否已被使用。
答案 1 :(得分:2)
也许你通过crtl + z停止uwsgi:
$ lsof -i:8000
结果可能是:
COMMAND PID USER FD TYPE ...
uwsgi 9196 xxx 4u xxx ...
然后
$ kill 9196
答案 2 :(得分:1)
我有同样的问题,但问题出在sqlalchemy,尝试添加:
@app.teardown_request
def shutdown_session(exception=None):
from extension import db
db.session.remove()
答案 3 :(得分:0)
我遇到了同样的问题,事实证明我的主要模块已经在加载app.run()
的情况下启动了应用程序。
因此请确保app.run()
部分中有if __name__ == '__main__'
。
答案 4 :(得分:0)
FWIW,我有一个类似的问题,发现当我应该运行uwsgi --http
时,我正在运行uwsgi --socket
。
答案 5 :(得分:0)
有趣的是,即使使用套接字,您也会遇到相同的Address already in use
错误。
vvvvvvvvvvv-- Socket!
error removing unix socket, unlink(): Permission denied [core/socket.c line 198]
bind(): Address already in use [core/socket.c line 230]
^^^^^^^^^^^^^^^-- "Address"
如果您确实使用套接字,请参见this answer。