如何在重新启动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 8004networking活动,试试这个命令(在Ubuntu上工作)。

 sudo fuser -k 8004/tcp 

其中as,8004是您要closures的端口号。 这应该杀死所有与端口8004相关的进程。

不,他不是个白痴家伙。 同样的事情发生在我身上。 显然,这是一个python UUID进程的bug,在django服务器closures后连续运行很长时间,这将端口连接起来。

 fuser -k 8000/tcp 

在terminal运行它在ubutu工程。 8000是港口。

此错误是由于服务器已在运行。

背景

我正在回答一个更为一般的层面,就像原来的问题一样,并不是Django所特有的。 所以那些从Google登陆的人可以很容易的解决这个问题。

当你需要清除一个端口时,你需要做的就是这两个步骤

  1. 在terminal运行fg
  2. 按Control-C(如果在Mac上)

说明

fg把这个过程带到了前台 。 然后Control-C停止服务器。

当我运行一个angular度的应用程序时,实际上我的端口8000有这个问题。 我在运行npm start时遇到错误

在angular-seed@0.0.0启动脚本错误失败

所以我跑了fg ,然后用Control-C停止了服务器

FG

然后,我能够成功运行服务器

npm开始

我使用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 pythonfind的进程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