Как "очистить" порт при перезапуске django runserver

часто при перезапуске Django runserver, если я использую тот же номер порта, я получаю сообщение "порт уже используется". Впоследствии мне нужно каждый раз увеличивать номер порта, чтобы избежать этого.

Это не так на всех серверах, однако, поэтому мне интересно, как я могу достичь этого в текущей системе, над которой я работаю?

кстати, платформа Ubuntu 8.10

18 ответов


вы получили это сообщение, поскольку сервер уже запущен (возможно в фоновом режиме). Обязательно убейте процесс (выведите его на передний план и нажмите ctrl-c), чтобы остановить процесс.


Я нашел эту информацию (первоначально от Кристинн Эрн Сигурдссон), чтобы решить мою проблему:

чтобы убить его с -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

затем вам нужно будет выбрать pid (который является вторым номером слева) для правой manage.py процесс (python manage.py runserver... и т. д.) и do:

kill -9 pid

для приведенного выше примера, если вы хотите освободить порт 8000, вы бы сделали:

kill -9 30144

Если ps aux команда (согласно ответу Meilo) не перечисляет процесс, который вы хотели убить, но показывает активный порт в netstat -np | grep 8004 сетевая активность, попробуйте эту команду (работает на Ubuntu).

sudo fuser -k 8004/tcp

где as, 8004-номер порта, который вы хотите закрыть. Это должно убить все процессы, связанные с Порт 8004.


нет, он не идиот. Со мной происходит то же самое. По-видимому, это ошибка с процессом python UUID, который продолжает работать долго после выключения сервера django,который связывает порт.


fuser -k 8000/tcp

Run в терминале он работает в ubutu. 8000 - это порт.


эта ошибка вызвана тем, что сервер уже запущен.

фон

я отвечаю на более общем уровне, не специфичном для Django, как задается исходный вопрос. Так что те, которые приземляются здесь из Google, могут легко решить проблему.

решение

когда вам нужно очистить порт, все, что вам нужно сделать, это эти два шага

  1. в терминале run fg
  2. нажмите Control-C (если на a mac)

объяснение

fg доводит процесс до изображения. Затем Control-C останавливает сервер.

пример

у меня на самом деле была эта проблема с моим портом 8000 при запуске углового приложения. Я получал ошибку, когда я бежал npm start

Failed at the angular-seed@0.0.0 start script error

и я побежал fg, затем я остановил сервер с помощью Control-C

fg

Тогда я был возможность успешного запуска сервера

npm start


Я использую pkill -If 'manage.py' (-I означает интерактивный, -f матчи больше, чем просто имя процесса). См.как убить все процессы с заданным частичным имя? подробнее о вводиться.


тип fg в терминале, чтобы вывести фоновую задачу на первый план.

пресс Ctrl+C чтобы закрыть / остановить работающий сервер.


если номер порта, который вы пытаетесь 8001, то используйте эту команду

sudo fuser -k 8001/tcp

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

Если вы хотите освободить порт 8000, чем просто скопировать команду и вставить в cmd, он попросит пароль sudo. И тогда вы можете идти.


вы не хотите просто увеличивать номер порта при перезапуске сервера Django. Это приведет к одновременному запуску нескольких экземпляров сервера Django. Лучшее решение-убить текущий экземпляр и запустить новый экземпляр.

для этого у вас есть несколько вариантов. Самый простой -

вместо python2: $ killall -9 python

Python3: $ killall -9 python3

если по какой-то причине, это не работает, вы можете сделать

$ kill <pid> здесь <pid> идентификатор процесса найден из простого .


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

Как сказал mipadi, вы должны завершить сервер (ctrl+c) и вернуться в командную строку перед вызовом manage.py runserver снова.

единственное, что может нарушить это, если вам каким-то образом удалось заставить runserver действовать как демон. Если это так, я предполагаю, что вы используете тестовый сервер Django в качестве фактического веб-сервера, который вы должны не сделать. Тестовый сервер Django однопоточный, медленный и хрупкий, подходит только для локальных развитие.


в Leopard я включаю Монитор активности и убиваю python. Разрешенный.


случилось так часто, что я написал псевдоним, чтобы убить процесс с python в имени (осторожно, если у вас есть другие такие процессы). Теперь я просто бегу (без Ubuntu)

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

вы даже можете добавить python manage.py runserver ... к тому же псевдониму, так что вы можете перезапустить с двумя нажатиями клавиш.


вы, должно быть, делали control + z .. Вместо этого сделайте control + 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