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


81

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

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

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

Благодарю.


1
Используйте навсегда github.com/foreverjs/forever . Тогда все, что вам нужно напечатать, этоforever restart
— basickarl

Ответы:


102

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


9
Вы также можете использовать «killall -2 node», который имеет тот же эффект.
— user123444555621

2
Не хочу / не нужно убивать все процессы узла. Если у меня будет открыт какой-нибудь узел repl, я буду недоволен после этой строки :)
— rfunduk

8
примечание: запустите демон узла, авторnohup node server.js &
— Drew LeSueur

52

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

npm установить nodemon -g

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

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

Проверьте репозиторий nodemon git: https://github.com/remy/nodemon


Я не знал об этом модуле, это что-то очень полезное, напоминает мне мое приложение django. Благодарю.
— Hola Soy Edu Feliz Navidad

Фантастическое предложение. Очень эффективен для разработки для быстрого тестирования кода.
— mbokil

хорошо, спасибо, как мы можем настроить eclipse для использования nodemon вместо node ..?
— Александр Миллс

16

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

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


5
К вашему сведению, теперь есть несколько модулей узлов, посвященных именно этому, взгляните на страницу Wiki модулей узлов .
— Марко,

14

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

#!/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, как описано здесь .

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


2
У меня mac osx, который мне приходилось использоватьcut -c17-20
— ThomasReggi

1
Разве это не то pkill node, для чего?
— tandrewnichols 04

6

Сказать «nodemon» - значит ответить на вопрос.

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

pkill -HUP node

5

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

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

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

node my_app.js

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

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

Очень удобно! Отличная идея.
— Радмация

2

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

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

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

1

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


1
Нет, не уходи kill -9. Это не позволяет полностью завершить процесс, оставит дескрипторы «осиротевшими» и, как правило, ненужными. Ванильkill , а если нет, kill -INTто хватит. Не ходите, kill -9если это действительно не нужно, а в большинстве случаев это не так.
— ThoriumBR

1

Сначала откройте терминал / командную строку, затем перейдите в каталог вашего проекта, теперь установите nodemon с помощью команды npm install nodemon --save-dev, эта команда гарантирует, что он сохранен как зависимость разработчика. Если вы работаете с expressjs, то в вашем файле пакета это будет выглядеть так:

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

теперь измените значение «start» в файле package.json, для производства мы будем использовать значение exsiting, но для разработки будем использовать nodemon для отслеживания изменений в исходном файле без перезапуска сервера. Там для нового значения для начала будет "start": "if [[$ NODE_ENV == 'production']]; then node ./bin/www; else nodemon ./bin/www; fi"

окончательный файл package.json будет выглядеть так

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

чтобы удалить nodemon, просто запустите команду npm uninstall nodemon

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.