web-dev-qa-db-fra.com

Comment redémarrer un serveur node.js

J'ai installé et exécute un serveur node.js sur osx. J'ai lancé un module de discussion et je le lance avec plaisir. J'ai modifié certaines pièces et j'ai besoin de redémarrer le serveur pour voir les effets.

Je sais seulement comment redémarrer en fermant la fenêtre du terminal, puis en la rouvrant puis en exécutant à nouveau le nœud chatdemo.js.

Un moyen de redémarrer sans fermer le terminal?

Merci.

68
jsnoob

Si c'est juste en cours d'exécution (pas un démon), utilisez simplement Ctrl-C.

Si c'est démonisé, vous pouvez essayer:

$ 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

PID est remplacé par le nombre dans la sortie de ps.

90
rfunduk

Pendant le développement, le meilleur moyen de redémarrer le serveur pour voir les modifications apportées est d’utiliser nodemon

npm installer nodemon -g

nodemon [nom de votre application]

nodemon surveillera les fichiers du répertoire dans lequel il a été démarré et s’ils changent, il redémarrera automatiquement votre application de nœud.

Vérifiez nodemon git repo: https://github.com/remy/nodemon

45
Nikhil Vishnu

Dans ce cas, vous redémarrez souvent votre serveur node.js car il est en développement actif et que vous apportez des modifications tout le temps. Il existe un excellent script de rechargement à chaud qui gérera cela en regardant tous vos fichiers .js et en redémarrant votre serveur node.js si l'un de ces fichiers ont changé. Juste le ticket pour le développement rapide et le test.

Le script et les explications sur son utilisation se trouvent ici: Draco Blue .

16
Paul Robinson

J'ai eu le même problème et ensuite écrit ce script shell qui tue tous les processus de nœud existants:

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

Une fois que cela a été enregistré en tant que fichier de script shell (xxx.sh), vous pouvez l’ajouter à votre chemin PATH comme décrit ici .

(Veuillez noter que cela va tuer tous les processus avec "noeud" dans son nom sauf le propre de grep, donc je suppose que dans certains cas, cela peut aussi tuer d'autres processus avec un nom similaire)

13
Crocodile

Dire "nodemon" répondrait à la question.

Mais pour savoir comment tuer seulement tous les démons de nœuds, voici ce qui fonctionne pour moi:

pkill -HUP node
4
spaxxUnited

Je comprends que mon commentaire concerne les fenêtres, mais peut-être que quelqu'un soit utile. Pour gagner courir en cmd:

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

alors vous pouvez exécuter votre application à nouveau:

node my_app.js

Vous pouvez aussi l'utiliser en fichier de commandes, avec des guillemets d'échappement:

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

Si je lance simplement l'application de nœud depuis la console (sans utiliser indéfiniment, etc.) j'utilise control + C, ne sachant pas si OSX dispose de la même combinaison de touches pour terminer mais beaucoup plus rapidement que de trouver l'identifiant du processus et de le tuer, vous pouvez également ajouter le Suivez le code de l'application de discussion que vous utilisez, puis tapez "exit" dans la console chaque fois que vous souhaitez fermer l'application.

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

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

Utiliser "kill -9 [PID]" ou "killall -9 node" a fonctionné pour moi là où "kill -2 [PID]" n'a pas fonctionné.

2
Steven H