2010-07-21 34 views
57

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

Solo sé cómo reiniciar al cerrar la ventana del terminal y volver a vincularla y luego ejecutar el nodo chatdemo.js nuevamente.

¿Alguna manera de reiniciar sin cerrar el terminal?

Gracias.

+0

Usar siempre https://github.com/foreverjs/forever. Entonces, todo lo que tiene que escribir es 'reiniciar para siempre' –

Respuesta

71

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

Si está endemoniada entonces usted podría 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 

Dónde PID se sustituye por el número en la salida de ps.

+6

También puede usar" killall -2 node ", que tiene el mismo efecto. – user123444555621

+2

No quiero/necesito matar a todos los procesos de nodo. Si tengo abiertos algunos nodos, seré un campista infeliz después de esa línea :) – rfunduk

+7

nota al margen: inicie un daemon de nodo por 'nohup node server.js &' –

16

En este caso, está reiniciando su servidor node.js a menudo porque está en desarrollo activo y está haciendo cambios todo el tiempo. Existe una gran secuencia de comandos de de recargar en caliente que se encargará de esto mirando todos sus archivos .js y reiniciando 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.

+5

FYI ahora hay varios módulos de nodos dedicados a eso, tome un vistazo a la [Wiki de módulos de nodo página] (https://github.com/joyent/node/wiki/modules#wiki-build-and-deployment). – Marco

11

que tenía el mismo problema y luego escribir este script de shell que mata a todos los procesos de los nodos 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 esto se guarda como un script de shell (xxx.sh) Archivo es posible que desee añadir a su RUTA como se describe here.

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

+2

Estoy en mac osx Tuve que usar 'cut -c17-20' – ThomasReggi

+0

¿No es exactamente para lo que se llama' pkill node'? – tandrewnichols

38

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

NPM instalar nodemon -g

nodemon [el nombre de la aplicación]

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

Comprobar nodemon repositorio git: https://github.com/remy/nodemon

+0

No sabía acerca de este módulo, es algo muy útil, me recuerda mi aplicación django. Gracias. –

+0

Fantástica sugerencia. Muy eficiente para el desarrollo para probar el código rápidamente. – mbokil

+0

ok gracias, ¿cómo podemos configurar eclipse para usar nodemon en lugar de nodo ..? –

2

El uso de "kill -9 [PID]" o "killall -9 nodo" trabajó para mí, donde "matar -2 [PID]" no funcionó.

2

Si solo ejecuto la aplicación de nodo desde la consola (no uso para siempre, etc.) uso control + C, no estoy seguro si OSX tiene la misma combinación de teclas para terminar pero mucho más rápido que encontrar el ID de proceso y matarlo, también podría agregar el siguiente código a la aplicación de chat que está utilizando y luego escribir 'salir' en la consola siempre que quiera cerrar la aplicación.

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

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

Entiendo que mi comentario se relaciona con Windows, pero puede ser que alguien sea útil. para Win carreras en cmd:

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

continuación, puede ejecutar su aplicación de nuevo:

node my_app.js 

También usted puede utilizarlo en archivo por lotes, con citas de escape:

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

Decir "nodemon" respondería a la pregunta.

Pero sobre la forma sólo para matar (todos) demonio (s) nodo, las siguientes obras para mí:

pkill -HUP node 
Cuestiones relacionadas