Jak zrestartować serwer node.js.

81

Zainstalowałem i używam serwera node.js na osx. Mam moduł czatu i szczęśliwie go uruchamiam. Zmieniłem kilka elementów i muszę ponownie uruchomić serwer, aby zobaczyć efekty.

Wiem tylko, jak ponownie uruchomić, zamykając okno terminala, a następnie ponownie je otwierając i ponownie uruchamiając node chatdemo.js.

Jakiś sposób na ponowne uruchomienie bez zamykania terminala?

Dzięki.

jsnoob
źródło
1
Używaj wiecznie github.com/foreverjs/forever . Wtedy wystarczy wpisaćforever restart
basickarl

Odpowiedzi:

102

Jeśli to tylko działa (nie jest demonem), po prostu użyj Ctrl-C.

Jeśli jest zdemonizowany, możesz spróbować:

$ 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

Gdzie PIDjest zastępowane przez liczbę w danych wyjściowych ps.

rfunduk
źródło
9
Możesz także użyć "killall -2 node", co daje ten sam efekt.
user123444555621
2
Nie chcę / nie trzeba zabijać wszystkich procesów węzłów. Jeśli mam otwartą odpowiedź węzła, po tej linii będę nieszczęśliwym obozowiczem :)
rfunduk
8
uwaga boczna: uruchom demona węzła przeznohup node server.js &
Drew LeSueur
52

Podczas programowania najlepszym sposobem na zrestartowanie serwera, aby zobaczyć wprowadzone zmiany, jest użycie nodemona

npm install nodemon -g

nodemon [nazwa twojej aplikacji]

nodemon będzie obserwował pliki w katalogu, w którym został uruchomiony nodemon, a jeśli się zmienią, automatycznie zrestartuje aplikację węzła.

Sprawdź repozytorium git nodemon : https://github.com/remy/nodemon

Nikhil Vishnu
źródło
Nie wiedziałem o tym module, to coś bardzo pożytecznego, przypomina mi moją aplikację django. dzięki.
Hola Soy Edu Feliz Navidad
Fantastyczna sugestia. Bardzo wydajne w programowaniu do szybkiego testowania kodu.
mbokil
ok dzięki, jak możemy skonfigurować eclipse, aby używał nodemona zamiast węzła ..?
Alexander Mills,
16

W tym przypadku często restartujesz serwer node.js, ponieważ jest on w fazie rozwoju i cały czas wprowadzasz zmiany. Istnieje świetny skrypt ponownego ładowania , który zajmie się tym za Ciebie, obserwując wszystkie pliki .js i ponownie uruchamiając serwer node.js, jeśli którykolwiek z tych plików się zmienił. Tylko bilet do szybkiego rozwoju i testów.

Skrypt i wyjaśnienie, jak go używać, znajdują się tutaj, w Draco Blue .

Paul Robinson
źródło
5
FYI, istnieje teraz kilka modułów węzłów przeznaczonych właśnie do tego, spójrz na stronę Wiki modułów węzłów .
Marco
14

Miałem ten sam problem, a następnie napisałem ten skrypt powłoki, który zabija wszystkie istniejące procesy węzłowe:

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

Po zapisaniu jako pliku skryptu powłoki (xxx.sh) możesz chcieć dodać go do swojej PATH, jak opisano tutaj .

(Zauważ, że to zabije wszystkie procesy z "węzłem" w nazwie oprócz własnego grepa, więc myślę, że w niektórych przypadkach może również zabić inne procesy o podobnej nazwie)

Krokodyl
źródło
2
Jestem na Mac OSX, którego musiałem użyćcut -c17-20
ThomasReggi,
1
Czy to nie jest dokładnie to, do czego pkill nodesłuży?
tandrewnichols
6

Powiedzenie „nodemon” odpowiadałoby na pytanie.

Ale jeśli chodzi o zabijanie (wszystkich) demonów węzłów, działa dla mnie następujące rozwiązanie:

pkill -HUP node
spaxxUnited
źródło
5

Rozumiem, że mój komentarz dotyczy okien, ale może komuś się przyda. Aby wygrać bieg w cmd:

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

następnie możesz ponownie uruchomić aplikację:

node my_app.js

Możesz również użyć go w pliku wsadowym, z cudzysłowami ucieczki:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js
dimaqw
źródło
Bardzo przydatne! Świetny pomysł.
Radmation
2

Jeśli po prostu uruchamiam aplikację węzła z konsoli (nie używam na zawsze itp.) Używam control + C, nie jestem pewien, czy OSX ma tę samą kombinację klawiszy do zakończenia, ale znacznie szybciej niż znalezienie identyfikatora procesu i zabicie go, możesz również dodać następujący kod do używanej aplikacji do czatu, a następnie wpisz „exit” w konsoli, gdy chcesz zamknąć aplikację.

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

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});
user511941
źródło
1

Używanie „kill -9 [PID]” lub „killall -9 node” działało, gdzie „kill -2 [PID]” nie działało.

Steven H.
źródło
1
Nie, nie odchodź kill -9. Nie pozwala to na czyste zakończenie procesu, pozostawia deskryptory osierocone i zwykle niepotrzebne. Wystarczy wanilia kill, jeśli nie, kill -INTwystarczy. Nie idź, kill -9chyba że jest to naprawdę potrzebne, a przez większość czasu nie jest.
ThoriumBR
1

Najpierw otwórz terminal / wiersz poleceń, a następnie przejdź do katalogu projektu, teraz zainstaluj nodemon za pomocą polecenia npm install nodemon --save-dev, to polecenie upewni się, że zostało zapisane jako zależność programisty. Jeśli pracujesz z expressjs, to w pliku pakietu będzie to wyglądać

{
  "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"
  }
}

teraz zmodyfikuj wartość "start" w pliku package.json, do produkcji użyjemy wartości exsiting, ale do rozwoju użyjemy nodemona do śledzenia zmian w pliku źródłowym bez restartowania serwera. Nowa wartość początkowa to "start": "if [[$ NODE_ENV == 'production']]; then node ./bin/www; else nodemon ./bin/www; fi"

ostateczny plik package.json będzie wyglądał jak

{
  "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"
  }
}

aby odinstalować nodemon jusy, po prostu uruchom polecenie npm uninstall nodemon

Lord
źródło