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.
forever restart
Odpowiedzi:
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
PID
jest zastępowane przez liczbę w danych wyjściowychps
.źródło
nohup node server.js &
Podczas programowania najlepszym sposobem na zrestartowanie serwera, aby zobaczyć wprowadzone zmiany, jest użycie nodemona
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
źródło
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 .
źródło
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)
źródło
cut -c17-20
pkill node
służy?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:
źródło
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ę:
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
źródło
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(); });
źródło
Używanie „kill -9 [PID]” lub „killall -9 node” działało, gdzie „kill -2 [PID]” nie działało.
źródło
kill -9
. Nie pozwala to na czyste zakończenie procesu, pozostawia deskryptory osierocone i zwykle niepotrzebne. Wystarczy waniliakill
, jeśli nie,kill -INT
wystarczy. Nie idź,kill -9
chyba że jest to naprawdę potrzebne, a przez większość czasu nie jest.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
źródło