Comment effacer un port lors du redémarrage de django runserver
Souvent, lors du redémarrage de Django runserver, si j'utilise le même numéro de port, je reçois un 'port est déjà utilisé' message. Par la suite, j'ai besoin d'incrémenter le numéro de port à chaque fois pour éviter cela.
Ce n'est pas le cas sur tous les serveurs, cependant, je me demandais comment je pourrais l'obtenir sur le système actuel qui je travaille?
BTW, la plate-forme Ubuntu 8.10
- Ce problème s'applique à plus que juste de Django, Donc peut-être que nous pouvons changer le titre? Je suis tombé sur cette erreur lors de l'exécution Angulaire de l'app. J'ai trouvé cette question avec la recherche google
how to kill port 8000
mais cela s'applique aussi bien pour moi. En changeant le titre et de faire de la portée plus générale, on pourrait empêcher certaines des questions redondantes plus tard.
Vous devez vous connecter pour publier un commentaire.
Vous obtenez ce message, car le serveur est déjà en cours d'exécution (éventuellement en arrière-plan). Assurez-vous de tuer le processus (l'amener au premier plan et appuyez sur ctrl-c pour arrêter le processus.
J'ai trouvé cette information (à l'origine de islandais kristinn Örn Sigurðsson) pour résoudre mon problème:
À le tuer avec -9 vous aurez la liste de tous cours d'exécution manage.py les processus, par exemple:
Vous obtiendrez un résultat semblable à ceci si vous avez commencé sur un grand nombre de ports:
Alors vous aurez à sélectionner le pid (qui est le deuxième numéro sur la gauche) pour le droit de manage.py processus (python manage.py runserver... etc) et à faire:
Pour l'exemple ci-dessus, si vous voulez libérer le port 8000, vous feriez:
Si le
ps aux
de commande (comme par Meilo de réponse) ne sont pas le processus que vous avez voulu tuer, mais montre le port actif dansnetstat -np | grep 8004
l'activité du réseau, essayez cette commande (qui a travaillé sur Ubuntu).où, comme, 8004 est le numéro de port que vous souhaitez fermer.
Cela devrait tuer tous les processus associés au port 8004.
sudo lsof -t -i tcp:8000 | xargs kill -9
astuce Chapeau: stackoverflow.com/questions/20239232/...Non, il n'est pas un idiot gars. La même chose arrive à moi. Apparemment c'est un bug avec le python UUID processus avec continue de courir de temps après le django server est l'arrêt qui relie le port.
Lancer dans un terminal, il travaille dans ubutu.
8000
est le port.Cette erreur est due au serveur déjà en cours d'exécution.
Fond
Je réponds sur un plan plus général n'est pas spécifique de Django comme la question de la première demande. Afin que ceux qui atterrissent ici à partir de Google peut facilement résoudre le problème.
Solution
Lorsque vous avez besoin de vider un port, tout ce que vous devez faire est de ces deux étapes
fg
Explication
fg apporte le processus de la premier plan. Puis sur Control-C arrête le serveur.
Exemple
J'ai été réellement avoir ce problème avec mon port 8000 lors de l'exécution angulaire de l'app. J'ai été faire une erreur quand j'ai couru
npm start
Alors, j'ai couru
fg
, puis j'ai arrêté le serveur avec Control-CEnsuite, j'ai été en mesure d'exécuter avec succès le serveur
Type
fg
dans le terminal pour afficher les tâches d'arrière-plan au premier plan.Appuyez sur Ctrl+C pour fermer/arrêter le serveur en cours d'exécution.
- Je utiliser
pkill -If 'manage.py'
(-I
signifie interactive,-f
correspond à plus que juste le nom du processus). Voir Comment tuer tous les processus avec un nom partiel? pour plus d'info sur pkill.Si le numéro de port que vous essayez, il est de 8001, puis utilisez cette commande
Si vous souhaitez libérer de port 8000 que juste la commande copier et coller dans votre cmd il vous sera demander sudo mot de passe. Et puis, vous êtes bon pour aller.
Vous ne souhaitez pas, il suffit d'incrémenter le numéro de port lors du redémarrage d'un serveur Django. Cela aura pour résultat d'avoir plusieurs instances de la Django serveur en cours d'exécution simultanément. Une meilleure solution est de tuer l'instance en cours et démarrer une nouvelle instance.
Pour ce faire, vous disposez de plusieurs options. Le plus simple est
Python2:
$ killall -9 python
Python3:
$ killall -9 python3
Si pour une raison quelconque, cela ne fonctionne pas, vous pouvez le faire
$ kill <pid>
où<pid>
est l'id de processus à partir d'un simple$ ps aux | grep python
commande.Comme mipadi dit, vous devriez être arrêter le serveur (ctrl+c) et le retour à l'invite de commande avant d'appeler
manage.py runserver
de nouveau.La seule chose qui pourrait être perturbant ce serait si vous avez réussi à faire runserver agir comme un démon. Si c'est le cas, j'imagine que vous êtes en utilisant le Django serveur de test que le serveur web, qui vous devriez PAS faire. Le Django serveur de test est mono-thread, lente et fragile, convient uniquement pour le développement local.
Dans Leopard, j'apporte sur le Moniteur d'Activité et de tuer python. Résolu.
Est arrivé si souvent que j'ai écrit un alias pour tuer le processus avec
python
dans le nom (attention si vous avez d'autres processus). Maintenant, je viens de lancer (pas de Ubuntu)Vous pouvez même ajouter
python manage.py runserver ...
pour le même alias de sorte que vous pouvez redémarrer avec deux frappes de touches.Vous devez avoir fait ctrl + z .. au Lieu de faire ctrl + c qui va tuer la session sur le serveur... Cheers!!!
Repost de https://stackoverflow.com/a/27138521/1467342:
Vous pouvez utiliser ce script à la place de
./manage.py runserver
. Je l'ai mis dansscripts/runserver.sh
.Ajouter la bibliothèque suivante dans manage.py
Maintenant ajouter le code python suivant, après si __name__ == "__principaux__":
Ce sera d'abord rechercher l'id de processus du port 8000 , va le tuer, puis redémarrez votre projet. Maintenant, chaque fois que vous n'avez pas besoin de tuer le pid manuellement.
Voir ma réponse ici. https://stackoverflow.com/a/34824239/5215825
netstat -ntlp
montre les connexions actives, les ports et les PIDs. En fait, une meilleure façon d'obtenir le PID seraitps aux
ou plus précisémentps aux | grep python
pour voir le python et python3 instances.