Как перезапустить сервер node.js

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

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

Любой способ перезапуска без закрытия терминала?

Спасибо.

Ответ 1

Если он просто запущен (а не демон), просто используйте 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.

Ответ 2

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

npm install nodemon -g

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

nodemon будет смотреть файлы в каталоге, в котором запускался nodemon, и если они будут изменены, он автоматически перезапустит ваше приложение node.

Проверьте nodemon git repo: https://github.com/remy/nodemon

Ответ 3

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

script и объяснение того, как его использовать, находятся здесь Draco Blue.

Ответ 4

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

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

После этого в качестве файла оболочки script (xxx.sh) вы можете добавить его в свой PATH, как описано here.

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

Я понимаю, что мой комментарий связан с окнами, но может быть кто-то полезен. Для победы запустить в 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

Ответ 8

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

Но о том, как только убить (все) node демон (ы), для меня работает следующее:

pkill -HUP node