重启django runserver时如何“清除”端口

时间:2009-05-18 23:15:57

标签: django

通常,当重新启动Django runserver时,如果我使用相同的端口号,我会得到一个'端口已经在使用中'消息。随后,我需要每次增加端口号以避免这种情况。

然而,并非所有服务器都是如此,所以我想知道如何在我正在使用的当前系统上实现这一目标?

BTW,平台是Ubuntu 8.10

19 个答案:

答案 0 :(得分:122)

我发现这些信息(最初来自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

然后你必须为正确的manage.py进程(python manage.py runserver ...等)选择pid(左边的第二个数字)并执行:

kill -9 pid

对于上面的例子,如果你想释放端口8000,你可以这样做:

kill -9 30144

答案 1 :(得分:39)

您收到该消息是因为服务器已在运行(可能在后台)。确保终止进程(将其置于前台并按ctrl-c)以停止该进程。

答案 2 :(得分:29)

如果ps aux命令(根据Meilo的回答)未列出您要杀死的进程但显示在netstat -np | grep 8004网络活动中活动的端口,请尝试此命令(在Ubuntu上工作)

sudo fuser -k 8004/tcp

其中,8004是您要关闭的端口号。 这应该会终止与端口8004相关的所有进程。

答案 3 :(得分:14)

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

答案 4 :(得分:12)

fuser -k 8000/tcp

在终端中运行它在ubutu中运行。 8000是端口。

答案 5 :(得分:9)

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

背景

我正在回答一个更普遍的问题,不像Django那样具体,就像原来的问题一样。那些来自Google的人可以轻松解决问题。

解决方案

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

  1. 在终端运行fg
  2. 按Control-C(如果在Mac上)
  3. 说明

    fg将流程带到前景。然后Control-C停止服务器。

    实施例

    在运行角度应用时,我的端口8000实际上遇到了这个问题。我跑npm start

    时收到错误

    Failed at the angular-seed@0.0.0 start script error

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

    fg

    然后我就能成功运行服务器

    npm start

答案 6 :(得分:6)

在终端中键入fg以将后台任务调到前台。

Ctrl + C 关闭/停止正在运行的服务器。

答案 7 :(得分:6)

我使用pkill -If 'manage.py'-I表示交互式,-f匹配的不仅仅是进程名称)。有关pkill的详细信息,请参阅How to kill all processes with a given partial name?

答案 8 :(得分:3)

sudo lsof -t -i tcp:8000 | xargs kill -9

如果您想要释放8000端口,而不仅仅是复制命令并粘贴到您的cmd中,它将要求输入sudo密码。然后你很高兴。

答案 9 :(得分:3)

如果您尝试的端口号是8001,请使用此命令

sudo fuser -k 8001/tcp

答案 10 :(得分:2)

重启Django服务器时,您不想简单地增加端口号。这将导致Django服务器的多个实例同时运行。更好的解决方案是终止当前实例并启动新实例。

为此,您有多种选择。最简单的是

Python2: $ killall -9 python

Python3: $ killall -9 python3

如果由于某种原因,这不起作用,你可以

$ kill <pid>其中<pid>是从简单$ ps aux | grep python命令找到的进程ID。

答案 11 :(得分:1)

netstat -tulpn |grep 8000|awk '{print $7}'|cut -d/ -f 1|xargs kill

答案 12 :(得分:0)

manage.py

中添加以下库
  

导入操作系统
   导入子流程
   汇入

现在在 if __name__ ==“ __main__”之后添加以下python代码:

ports = ['8000']
popen = subprocess.Popen(['netstat', '-lpn'],
                         shell=False,
                         stdout=subprocess.PIPE)
(data, err) = popen.communicate()
pattern = "^tcp.*((?:{0})).* (?P<pid>[0-9]*)/.*$"
pattern = pattern.format(')|(?:'.join(ports))
prog = re.compile(pattern)
for line in data.split('\n'):
    match = re.match(prog, line)
    if match:
        pid = match.group('pid')
        subprocess.Popen(['kill', '-9', pid])

这将首先找到端口8000的进程ID,将其杀死,然后重新启动您的项目。现在,您无需每次手动杀死该pid。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

你一定是在做控制+ z ..而是做控制+ c会杀死服务器会话......干杯!!!

答案 15 :(得分:0)

经常发生我写了一个别名来杀死名称中python的进程(如果你有其他这样的进程,请小心)。现在我跑(没有Ubuntu)

kill $(ps | grep "python" | awk "{print $1}")

您甚至可以将python manage.py runserver ...添加到同一个别名中,这样您就可以通过两次击键重新启动。

答案 16 :(得分:0)

在Leopard中,我引入了Activity Monitor并杀死了python。解决。

答案 17 :(得分:0)

就像mipadi所说,你应该终止服务器(ctrl + c)并返回命令提示符,然后再次调用manage.py runserver

唯一可能破坏这种情况的是,如果你以某种方式设法使runserver充当守护进程。如果是这种情况,我猜你正在使用Django测试服务器作为实际的Web服务器,你应该做。 Django测试服务器是单线程的,缓慢且易碎的,仅适用于本地开发。

答案 18 :(得分:-1)

netstat -ntlp

请在此处查看我的完整答案。 https://stackoverflow.com/a/34824239/5215825