Как «очистить» порт при перезапуске сервера запуска django - PullRequest
67 голосов
/ 19 мая 2009

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

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

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

Ответы [ 19 ]

2 голосов
/ 26 мая 2017

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

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

Python2: $ killall -9 python

Python3: $ killall -9 python3

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

$ kill <pid>, где <pid> - идентификатор процесса, найденный из простой команды $ ps aux | grep python.

1 голос
/ 22 апреля 2014
netstat -tulpn |grep 8000|awk '{print $7}'|cut -d/ -f 1|xargs kill
0 голосов
/ 28 апреля 2019

Добавьте следующую библиотеку в manage.py

импорт ОС
подпроцесс импорта
импорт ре

Теперь добавьте следующий код Python после if __name__ == "__main __":

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, уничтожит его и затем перезапустит ваш проект. Теперь каждый раз, когда вам не нужно убивать пид вручную.

0 голосов
/ 11 апреля 2017
netstat -ntlp

Смотрите мой полный ответ здесь. https://stackoverflow.com/a/34824239/5215825

0 голосов
/ 17 июня 2009

В Leopard я включаю Монитор активности и убиваю питона. Решаемые.

0 голосов
/ 26 ноября 2014

Репост от 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
0 голосов
/ 19 мая 2009

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

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

0 голосов
/ 28 января 2014

Вы, должно быть, делали control + z .. Вместо этого сделайте control + c, который убьет сеанс сервера ... Приветствия !!!

0 голосов
/ 08 июня 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...