tarantino - Cómo ''borrar'' el puerto al reiniciar django runserver
django tutorial (18)
A menudo, al reiniciar Django runserver, si uso el mismo número de puerto, aparece el mensaje ''El puerto ya está en uso''. Posteriormente, necesito incrementar el número de puerto cada vez para evitar esto.
Sin embargo, no es el caso en todos los servidores, así que me pregunto cómo podría lograr esto en el sistema actual en el que estoy trabajando.
Por cierto, la plataforma es Ubuntu 8.10
Este error se debe a que el servidor ya se está ejecutando.
Fondo
Estoy respondiendo en un nivel más general que no es específico de Django como lo hace la pregunta original. Para que aquellos que aterrizan aquí desde Google puedan solucionar fácilmente el problema.
Solución
Cuando necesite borrar un puerto, todo lo que necesita hacer son estos dos pasos
- En la terminal ejecuta
fg
- Presione Control-C (si está en un Mac)
Explicación
fg lleva el proceso al primer plano . Entonces Control-C detiene el servidor.
Ejemplo
De hecho, estaba teniendo este problema con mi puerto 8000 cuando ejecutaba una aplicación angular. Me estaba npm start
un error cuando corrí npm start
Así que ejecuté fg
, luego paré el servidor con Control-C
Luego pude ejecutar con éxito el servidor
Como dijo mipadi, debe terminar el servidor (ctrl + c) y regresar al símbolo del sistema antes de volver a llamar a manage.py runserver
.
Lo único que podría estar perturbando esto sería si de alguna manera has logrado que el servidor funcione como un daemon. Si este es el caso, supongo que está utilizando el servidor de prueba de Django como el servidor web real, lo cual NO debe hacer. El servidor de prueba Django es de un solo hilo, lento y frágil, adecuado solo para el desarrollo local.
Debes haber estado haciendo control + z ... En vez de eso, controla + c que matará la sesión del servidor ... ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
En Leopard, traigo el Monitor de Actividad y mato a Python. Resuelto
Encontré esta información (originalmente de Kristinn Örn Sigurðsson) para resolver mi problema:
Para matarlo con -9, tendrá que enumerar todos los procesos de manage.py en ejecución, por ejemplo:
ps aux | grep -i manage
Obtendrás un resultado similar si has comenzado en muchos puertos:
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
Luego tendrá que seleccionar el pid (que es el segundo número a la izquierda) para el proceso manage.py correcto (python manage.py runserver ... etc) y hacer:
kill -9 pid
Para el ejemplo anterior, si quisiera liberar el puerto 8000, haría:
kill -9 30144
Escriba fg
en el terminal para mostrar la tarea de fondo al primer plano.
Presione Ctrl + C para cerrar / detener el servidor en ejecución.
No desea simplemente aumentar el número de puerto al reiniciar un servidor Django. Esto dará como resultado tener múltiples instancias del servidor Django ejecutándose simultáneamente. Una mejor solución es matar la instancia actual y comenzar una nueva instancia.
Para hacer esto, tienes múltiples opciones. El más fácil es
Python2: $ killall -9 python
Python3: $ killall -9 python3
Si por alguna razón, esto no funciona, puedes hacer
$ kill <pid>
donde <pid>
es la identificación del proceso encontrada desde un simple $ ps aux | grep python
$ ps aux | grep python
No, él no es un idiota chicos. Lo mismo me pasa a mí. Aparentemente es un error con el proceso UUID de python que continúa ejecutándose mucho después de que el servidor django se cierre, lo que ata el puerto.
Recibirá ese mensaje porque el servidor ya se está ejecutando (posiblemente en segundo plano). Asegúrate de matar el proceso (ponlo en primer plano y presiona ctrl-c) para detener el proceso.
Repost desde https://.com/a/27138521/1467342 :
Puede usar este script en lugar de ./manage.py runserver
. Lo puse en 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
Si el comando ps aux
(según la respuesta de Meilo) no muestra el proceso que quería matar, pero muestra el puerto activo en netstat -np | grep 8004
netstat -np | grep 8004
actividad de la red netstat -np | grep 8004
, pruebe este comando (trabajó en Ubuntu).
sudo fuser -k 8004/tcp
donde como, 8004 es el número de puerto que desea cerrar. Esto debería matar a todos los procesos asociados con el puerto 8004.
Si el número de puerto que estás intentando es 8001, utiliza este comando
sudo fuser -k 8001/tcp
Sucedió tan a menudo que escribí un alias para matar el proceso con python
en el nombre (cuidado si tienes otros procesos similares). Ahora solo corro (sin Ubuntu)
kill $(ps | grep "python" | awk "{print $1}")
Incluso puede agregar python manage.py runserver ...
al mismo alias para que pueda reiniciar con dos teclas.
Yo uso pkill -If ''manage.py''
( -I
significa interactivo, -f
coincide más que solo con el nombre del proceso). Consulte Cómo matar todos los procesos con un nombre parcial dado? para más información sobre pkill.
fuser -k 8000/tcp
Ejecutar en la terminal funciona en ubutu. 8000
es el puerto.
netstat -ntlp
Vea mi respuesta completa aquí. https://.com/a/34824239/5215825
netstat -tulpn |grep 8000|awk ''{print $7}''|cut -d/ -f 1|xargs kill
sudo lsof -t -i tcp:8000 | xargs kill -9
Si desea liberar 8000 puertos que copiar el comando y pegar en su cmd, le pedirá sudo password. Y entonces eres bueno para ir.