如何在重新启动django runserver时清除端口
通常,当重新启动Django runserver时,如果我使用相同的端口号,则会得到一个“端口已被使用”的消息。 随后,我需要每次增加端口号以避免这种情况。
然而,在所有的服务器上并不是这样,所以我想知道如何在我正在使用的当前系统上实现这个function?
顺便说一句,该平台是Ubuntu 8.10
你得到这个消息,因为服务器已经在运行(可能在后台)。 确保杀死进程(将其带到前台并按ctrl-c)来停止进程。
我发现这个信息(最初来自KristinnÖrnSigurðsson)解决我的问题:
要用-9来杀死它,你必须列出所有正在运行的manage.py进程,例如:
ps aux | grep -i manage
如果您已经在许多端口上启动,您将得到类似于此的输出:
14770 8264 0.0 1.9 546948 40904 ? S Sep19 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8006 14770 15215 0.0 2.7 536708 56420 ? S Sep13 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8001 14770 30144 0.0 2.1 612488 44912 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8000 14770 30282 0.0 1.9 678024 40104 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8002 14770 30592 0.0 2.1 678024 45008 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8003 14770 30743 0.0 2.1 678024 45044 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8004
然后你必须select正确的manage.py进程(python manage.py runserver …等)的pid(这是左边的第二个数字),然后执行:
kill -9 pid
对于上面的例子,如果你想释放8000端口,你可以这样做:
kill -9 30144
如果ps aux
命令(按照Meilo的回答)没有列出你想要杀死的进程,但是显示在netstat -np | grep 8004
netstat -np | grep 8004
networking活动,试试这个命令(在Ubuntu上工作)。
sudo fuser -k 8004/tcp
其中as,8004是您要closures的端口号。 这应该杀死所有与端口8004相关的进程。
不,他不是个白痴家伙。 同样的事情发生在我身上。 显然,这是一个python UUID进程的bug,在django服务器closures后连续运行很长时间,这将端口连接起来。
fuser -k 8000/tcp
在terminal运行它在ubutu工程。 8000
是港口。
此错误是由于服务器已在运行。
背景
我正在回答一个更为一般的层面,就像原来的问题一样,并不是Django所特有的。 所以那些从Google登陆的人可以很容易的解决这个问题。
解
当你需要清除一个端口时,你需要做的就是这两个步骤
- 在terminal运行
fg
- 按Control-C(如果在Mac上)
说明
fg把这个过程带到了前台 。 然后Control-C停止服务器。
例
当我运行一个angular度的应用程序时,实际上我的端口8000有这个问题。 我在运行npm start
时遇到错误
所以我跑了fg
,然后用Control-C停止了服务器
然后,我能够成功运行服务器
我使用pkill -If 'manage.py'
( -I
I表示交互式, -f
不仅仅匹配进程名称)。 请参阅如何使用给定的部分名称来终止所有进程? 欲了解更多关于pkill的信息。
在terminal中input'fg'
,将后台任务调出到前台。
Crtl + Cclosures/停止正在运行的服务器。
如果您尝试的端口号是8001,则使用此命令
sudo fuser -k 8001/tcp
sudo lsof -t -i tcp:8000 | xargs kill -9
如果你想释放8000端口而不是复制命令并粘贴到你的cmd,它会要求inputsudo密码。 然后你很好走。
netstat -tulpn |grep 8000|awk '{print $7}'|cut -d/ -f 1|xargs kill
重新启动Django服务器时,您不希望简单地增加端口号。 这将导致同时运行多个Django服务器实例。 更好的解决scheme是杀死当前的实例并启动一个新的实例。
要做到这一点,你有多个选项。 最简单的是
Python2: $ killall -9 python
Python3: $ killall -9 python3
如果由于某种原因,这是行不通的,你可以做
$ kill <pid>
其中<pid>
是从$ ps aux | grep python
find的进程ID $ ps aux | grep python
命令。
就像mipadi说的那样,在再次调用manage.py runserver
之前,应该终止服务器(ctrl + c)并返回命令提示符。
唯一可能破坏这个的是如果你设法使runserver作为一个守护进程。 如果是这样,我猜你正在使用Djangotesting服务器作为实际的Web服务器,你不应该这样做。 Djangotesting服务器是单线程的,缓慢而脆弱的,仅适用于本地开发。
在Leopard中,我带上Activity Monitor并杀死python。 解决了。
经常发生,我写了一个别名来杀死名称中的python
进程(小心,如果你有其他这样的进程)。 现在我只是运行(没有Ubuntu)
kill $(ps | grep "python" | awk "{print $1}")
您甚至可以将python manage.py runserver ...
添加到相同的别名,以便您可以使用两个按键重新启动。
你必须一直在做控制+ z ..而不是控制+ c将杀死服务器会话…干杯!
转自https://stackoverflow.com/a/27138521/1467342 :
您可以使用此脚本代替./manage.py runserver
。 我把它放在scripts/runserver.sh
。
#!/bin/bash pid=$(ps aux | grep "./manage.py runserver" | grep -v grep | head -1 | xargs | cut -f2 -d" ") if [[ -n "$pid" ]]; then kill $pid fi fuser -k 8000/tcp ./manage.py runserver
netstat -ntlp
在这里看到我完整的答案。 https://stackoverflow.com/a/34824239/5215825