Błąd serwera Django: port jest już w użyciu


204

Ponowne uruchomienie serwera Django wyświetla następujący błąd:

this port is already running....

Ten problem występuje szczególnie w systemie Ubuntu, a nie w innych systemach operacyjnych. Jak mogę zwolnić port, aby zrestartować serwer?

Odpowiedzi:


536

Prostsze rozwiązanie wystarczy wpisać sudo fuser -k 8000/tcp. To powinno zabić wszystkie procesy związane z portem 8000.

EDYTOWAĆ:

Dla użytkowników osx możesz użyć sudo lsof -t -i tcp:8000 | xargs kill -9


23
Na komputerze Mac musisz użyć, sudo lsof -i tcp:8000a następnie zabić identyfikatory procesu, które się wyświetlają.
gordonc

Tak więc niezależnie od portu wystarczy zastąpić 8000 portem, w którym blok się pojawia.
Manish Shrivastava,

Otrzymuję ten błąd, ale zabiłem wszystko w porcie.
wanderer0810

57
netstat -ntlp

Pokaże coś takiego.

   Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State           PID/Program name    
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      6599/python         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.124.1:53        0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::3306                 :::*                    LISTEN     

Teraz wystarczy zamknąć port, w którym działa już Django / python, zabijając powiązany z nim proces.

kill -9 PID

w moim przypadku

kill -9 6599

Teraz uruchom aplikację Django.


w tym celu musimy zainstalować narzędzia sieciowe.
Pooja Khatri

11
ps aux | grep -i manage

after that you will see all process 


ubuntu@ip-10-154-22-113:~/django-apps/projectname$ ps aux | grep -i manage
ubuntu    3439  0.0  2.3  40228 14064 pts/0    T    06:47   0:00 python manage.py runserver project name
ubuntu    3440  1.4  9.7 200996 59324 pts/0    Tl   06:47   2:52 /usr/bin/python manage.py runserver project name
ubuntu    4581  0.0  0.1   7988   892 pts/0    S+   10:02   0:00 grep --color=auto -i manage


kill -9 process id


e.d kill -9 3440


`enter code here`after that :

python manage.py runserver project name

Więc próbujesz ponownie uruchomić serwer, gdy już działa? To nie zadziała, ponieważ pierwszy będzie używał portu HTTP. Musisz zabić lub zakończyć pierwszy, zanim spróbujesz uruchomić ponownie (przynajmniej uruchom go na tym samym porcie).
Jakiś programista koleś

Działa, ponieważ zabiłeś aktualnie działającą instancję, co powiedziałem, że musisz zrobić. Nie możesz mieć dwóch programów nasłuchujących na tym samym porcie sieciowym, to takie proste. Jest to więc rozwiązanie czegoś, co tak naprawdę nie jest problemem, tylko faktem.
Jakiś programista koleś

Przepraszam, jeśli mogłem być silny, dzisiaj czuję się trochę zrzędliwy. : /
Jakiś programista koleś

5

Domyślnie polecenie runserver uruchamia serwer programistyczny na wewnętrznym adresie IP na porcie 8000.

Jeśli chcesz zmienić port serwera, przekaż go jako argument wiersza polecenia. Na przykład to polecenie uruchamia serwer na porcie 8080:

python manage.py runserver 8080

1
@StephenRauch, pytanie nie pyta, kto korzysta z portu. Pytanie dotyczy zgłoszonego błędu. To jest rozwiązanie tego, jak naprawić ten błąd.
Freddy,

OP pyta, jak zrestartować serwer na porcie 8000, nie pytając o uruchomienie go na innym porcie
uclaastro

4

Nie używamy tego polecenia {sudo lsof -t -i tcp: 8000 | xargs kill -9} Ponieważ to zamknie wszystkie karty ... Powinieneś użyć

ps -ef | pyton grep

zabij -9 id_procesu

ps -ef | grep python (pokaż cały proces z identyfikatorem)

kill -9 11633 (11633 to identyfikator procesu do: - / bin / python manage.py runserver)


2

To rozszerzenie odpowiedzi Mounira. Dodałem dla ciebie skrypt bash. Po prostu uruchom ./scripts/runserver.shzamiast ./manage.py runserveri będzie działać dokładnie w ten sam sposób.

#!/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

2

Przepraszamy za komentarz w starym poście, ale może pomóc ludziom

Po prostu wpisz to na swoim terminalu

killall -9 python3

Zabije wszystkie python3 uruchomione na twoim komputerze i uwolni cały twój port. Bardzo mi pomóż, kiedy mam pracować w projekcie Django .


1

Dla mnie dzieje się tak, ponieważ moje żądanie API w Postmanie jest przechwytywane przez punkt przerwania debuggera w mojej aplikacji ... pozostawiając zawieszone żądanie. Jeśli anuluję żądanie w Postman przed zabiciem serwera mojej aplikacji, błąd nie wystąpi w pierwszej kolejności.

-> Więc spróbuj anulować wszelkie otwarte żądania składane w innych programach.

W systemie macOS używam, sudo lsof -t -i tcp:8000 | xargs kill -9gdy zapominam anulować otwarte żądanie HTTP w celu rozwiązania. error = That port is already in use.Również kompletne zamyka moją aplikację Postman, dlatego moje pierwsze rozwiązanie jest lepsze.


1

Wpisz „fg” jako polecenie po tym ctl-c.
Polecenie:
Fg pokaże, które działa w tle. Po tym ctl-c go zatrzyma.

fg
ctl-c


0

ps aux | grep zarządzać

ubuntu 3438 127.0.0 2.3 40256 14064 pkt / 0 T 06:47 0:00 python manage.py runserver

zabij -9 3438


2
Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, co zmniejsza czytelność zarówno kodu, jak i objaśnień!
przedłużenie

0

Wygląda na to, że IDE, VSCode, Puppeteer, nodemon, express itp. Powodują ten problem, uruchomiłeś proces w tle lub właśnie zamknąłeś obszar debugowania [przeglądarka, terminal itp.] Lub cokolwiek, w każdym razie odpowiedziałem na to samo pytanie wcześniej, tutaj jest link

https://stackoverflow.com/a/49797588/2918720


0

Jeśli masz do czynienia z tym problemem w systemie Mac, wystarczy otworzyć monitor aktywności i wymusić dość Python, a następnie spróbuj ponownie

wprowadź opis zdjęcia tutaj



0

W przypadku korzystania z terminalu ekranowego VSC, błąd może wynikać z faktu, że już uruchomiłeś serwer w innej powłoce.

Wystarczy kliknąć dropbox po lewej stronie znaku + w nagłówku terminala VSC i wybrać inną powłokę i sprawdzić, czy serwer już tam działa. Zamknij ten serwer, a będziesz gotowy do uruchomienia innego serwera.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.