Как "очистить" порт при перезапуске 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,который связывает порт.
эта ошибка вызвана тем, что сервер уже запущен.
фон
я отвечаю на более общем уровне, не специфичном для Django, как задается исходный вопрос. Так что те, которые приземляются здесь из Google, могут легко решить проблему.
решение
когда вам нужно очистить порт, все, что вам нужно сделать, это эти два шага
- в терминале run
fg
- нажмите Control-C (если на a mac)
объяснение
fg доводит процесс до изображения. Затем Control-C останавливает сервер.
пример
у меня на самом деле была эта проблема с моим портом 8000 при запуске углового приложения. Я получал ошибку, когда я бежал npm start
и я побежал fg
, затем я остановил сервер с помощью Control-C
Тогда я был возможность успешного запуска сервера
Я использую pkill -If 'manage.py'
(-I
означает интерактивный, -f
матчи больше, чем просто имя процесса). См.как убить все процессы с заданным частичным имя? подробнее о вводиться.
тип fg
в терминале, чтобы вывести фоновую задачу на первый план.
пресс Ctrl+C чтобы закрыть / остановить работающий сервер.
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>
идентификатор процесса найден из простого .
Как сказал mipadi, вы должны завершить сервер (ctrl+c) и вернуться в командную строку перед вызовом manage.py runserver
снова.
единственное, что может нарушить это, если вам каким-то образом удалось заставить runserver действовать как демон. Если это так, я предполагаю, что вы используете тестовый сервер Django в качестве фактического веб-сервера, который вы должны не сделать. Тестовый сервер Django однопоточный, медленный и хрупкий, подходит только для локальных развитие.
случилось так часто, что я написал псевдоним, чтобы убить процесс с 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