Cómo reiniciar un servidor node.js

81

He instalado y estoy ejecutando un servidor node.js en osx. He dled un módulo de chat y lo estoy ejecutando felizmente. He modificado algunas piezas y necesito reiniciar el servidor para ver los efectos.

Solo sé cómo reiniciar cerrando la ventana del terminal y luego reabrirla y luego ejecutar el nodo chatdemo.js nuevamente.

¿Alguna forma de reiniciar sin cerrar la terminal?

Gracias.

jsnoob
fuente
1
Utilice forever github.com/foreverjs/forever . Entonces todo lo que tienes que escribir esforever restart
basickarl

Respuestas:

102

Si solo se está ejecutando (no es un demonio), use Ctrl-C.

Si está demonizado, puede intentar:

$ ps aux | grep node
you   PID  1.5  0.2  44172  8260 pts/2    S    15:25   0:00 node app.js
$ kill -2 PID

Donde PIDse reemplaza por el número en la salida de ps.

rfunduk
fuente
9
También puedes usar "killall -2 node", que tiene el mismo efecto.
user123444555621
2
No quiero / necesito matar todos los procesos de nodo. Si tengo algunas respuestas de nodo abiertas, seré un campista infeliz después de esa línea :)
rfunduk
7
nota al margen: inicie un demonio de nodo pornohup node server.js &
Drew LeSueur
52

Durante el desarrollo, la mejor manera de reiniciar el servidor para ver los cambios realizados es usar nodemon

npm instalar nodemon -g

nodemon [nombre de tu aplicación]

nodemon observará los archivos en el directorio en el que se inició nodemon y, si cambian, reiniciará automáticamente su aplicación de nodo.

Verifique el repositorio git de nodemon : https://github.com/remy/nodemon

Nikhil Vishnu
fuente
No conocía este módulo, es algo muy útil, me recuerda a mi aplicación django. Gracias.
Hola Soy Edu Feliz Navidad
Sugerencia fantástica. Muy eficiente para el desarrollo para probar el código rápidamente.
mbokil
ok gracias, ¿cómo podemos configurar eclipse para usar nodemon en lugar de node ..?
Alexander Mills
16

En este caso, está reiniciando su servidor node.js con frecuencia porque está en desarrollo activo y está haciendo cambios todo el tiempo. Existe un excelente script de recarga en caliente que se encargará de esto por usted al observar todos sus archivos .js y reiniciar su servidor node.js si alguno de esos archivos ha cambiado. Solo el boleto para un rápido desarrollo y prueba.

El guión y la explicación sobre cómo usarlo están aquí en Draco Blue .

Paul Robinson
fuente
5
Para su información, ahora hay varios módulos de nodo dedicados precisamente a eso, eche un vistazo a la página Wiki de módulos de nodo .
Marco
14

Tuve el mismo problema y luego escribí este script de shell que mata todos los procesos de nodo existentes:

#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)

echo "OK, so we will stop these process/es now..."

for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"

Después de que esto se guarde como un archivo de script de shell (xxx.sh), es posible que desee agregarlo a su PATH como se describe aquí .

(Tenga en cuenta que esto matará todos los procesos con "nodo" en su nombre, excepto el de grep, así que supongo que en algunos casos también puede matar algunos otros procesos con un nombre similar)

Cocodrilo
fuente
2
Estoy en mac osx que tuve que usarcut -c17-20
ThomasReggi
1
¿No es esto exactamente para lo que pkill nodees?
tandrewnichols
6

Decir "nodemon" respondería a la pregunta.

Pero sobre cómo solo matar (todos) los demonios del nodo, lo siguiente funciona para mí:

pkill -HUP node
spaxxUnited
fuente
5

Entiendo que mi comentario se relaciona con Windows, pero puede ser de utilidad para alguien. Para ejecutar win en cmd:

wmic process  where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate

entonces puedes ejecutar tu aplicación nuevamente:

node my_app.js

También puede usarlo en un archivo por lotes, con comillas de escape:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js
dimaqw
fuente
¡Muy útil! Gran idea.
Radmation
2

Usar "kill -9 [PID]" o "killall -9 node" funcionó para mí donde "kill -2 [PID]" no funcionó.

Steven H
fuente
2

Si solo ejecuto la aplicación de nodo desde la consola (sin usar para siempre, etc.), uso control + C, no estoy seguro de si OSX tiene la misma combinación de teclas para terminar, pero mucho más rápido que encontrar la identificación del proceso y matarlo, también puede agregar el siguiendo el código de la aplicación de chat que está utilizando y luego escriba 'salir' en la consola cada vez que desee cerrar la aplicación.

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});
usuario511941
fuente
1

Primero abra la terminal / línea de comando, luego vaya al directorio de su proyecto, ahora instale nodemon usando el comando npm install nodemon --save-dev este comando se asegurará de que se guarde como dependencia del desarrollador. Si está trabajando con expressjs , en su archivo de paquete se verá así

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

ahora modifique el valor de "inicio" en su archivo package.json, para producción usaremos el valor existente pero para desarrollo usaremos nodemon para rastrear los cambios en el archivo fuente sin reiniciar el servidor. El nuevo valor de inicio es "inicio": "si [[$ NODE_ENV == 'producción']]; luego nodo ./bin/www; de lo contrario nodemon ./bin/www; fi"

El archivo final package.json se verá así

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

para desinstalar nodemon jusy simplemente ejecute el comando npm desinstalar nodemon

Señor
fuente