Как перезапустить сервер node.js - PullRequest
68 голосов
/ 21 июля 2010

Я установил и запускаю сервер node.js на osx. Я набрал модуль чата и с удовольствием его запускаю. Я изменил некоторые части и мне нужно перезапустить сервер, чтобы увидеть результаты.

Я только знаю, как перезапустить, закрыв окно терминала, а затем снова открыв его и снова запустив узел chatdemo.js.

Можно ли перезагрузить компьютер, не закрывая терминал?

Спасибо.

Ответы [ 8 ]

89 голосов
/ 21 июля 2010

Если он просто запущен (не демон), просто используйте Ctrl-C.

Если он демонизирован, вы можете попробовать:

$ 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 заменяется числом на выходе ps.

44 голосов
/ 24 сентября 2012

Во время разработки лучший способ перезапустить сервер для просмотра изменений - это использовать nodemon

npm install nodemon -g

nodemon [имя вашего приложения]

nodemon будет следить за файлами в каталоге, в котором был запущен nodemon, и если они изменятся, он автоматически перезапустит приложение вашего узла.Git РЕПО: https://github.com/remy/nodemon

16 голосов
/ 23 ноября 2010

В этом случае вы часто перезагружаете свой сервер node.js, потому что он находится в активной разработке, и вы все время вносите изменения. Существует отличный скрипт hot reload , который справится с этим, просмотрев все ваши файлы .js и перезапустив сервер node.js, если какой-либо из этих файлов изменился. Просто билет для быстрой разработки и тестирования.

Сценарий и объяснение того, как его использовать, можно найти здесь: Draco Blue .

12 голосов
/ 22 мая 2011

У меня была такая же проблема, а затем я написал этот сценарий оболочки, который убивает все существующие процессы узла:

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

После того, как это будет сохранено как файл сценария оболочки (xxx.sh), вы можете добавить его в свой PATH, как описано здесь .

(Обратите внимание, что это убьет все процессы с "узлом" в его имени, кроме собственного grep, поэтому я предполагаю, что в некоторых случаях это может также убить некоторые другие процессы с похожим именем)

3 голосов
/ 04 марта 2014

Сказать, что "nodemon" ответит на вопрос.

Но как убить (всех) узловых демонов, мне подходит следующее:

pkill -HUP node
3 голосов
/ 14 ноября 2013

Я понимаю, что мой комментарий связан с окнами, но может быть кому-то пригодится. Для победы запустить в cmd:

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

тогда вы можете снова запустить приложение:

node my_app.js

Также вы можете использовать его в командном файле с кавычками:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js
2 голосов
/ 15 февраля 2013

Если я просто запускаю приложение узла из консоли (не использую вечно и т. Д.), Я использую control + C, но не уверен, что OSX имеет ту же комбинацию клавиш для завершения, но гораздо быстрее, чем поиск идентификатора процесса и его уничтожение, вы можететакже добавьте следующий код в приложение чата, которое вы используете, и затем введите «exit» в консоли всякий раз, когда вы хотите закрыть приложение.

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

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});
2 голосов
/ 19 декабря 2012

Использование «kill -9 [PID]» или «killall -9 node» работало для меня, когда «kill -2 [PID]» не работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...