node.jsサーバーを再起動する方法


81

osxにnode.jsサーバーをインストールして実行しています。私はチャットモジュールを作成し、それを楽しく実行しています。いくつかの部分を変更したので、効果を確認するにはサーバーを再起動する必要があります。

ターミナルウィンドウを閉じて再度操作し、ノードchatdemo.jsを再度実行して再起動する方法しかわかりません。

ターミナルを閉じずに再起動する方法はありますか?

ありがとう。


1
forever github.com/foreverjs/foreverを使用します。次に入力する必要があるのはforever restart
basickarl 2016年

回答:


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ノード」を使用することもできます。
user123444555621 2010

2
すべてのノードプロセスを強制終了する必要はありません。いくつかのノード担当者が開いている場合、その行の後で不幸なキャンピングカーになります:)
rfunduk 2010

8
補足:ノードデーモンを開始するnohup node server.js &
Drew LeSueur 2010年

52

開発中に、行われた変更を確認するためにサーバーを再起動する最良の方法は、nodemonを使用すること です。

npm install nodemon -g

nodemon [あなたのアプリ名]

nodemonは、nodemonが開始されたディレクトリ内のファイルを監視し、それらが変更された場合、ノードアプリケーションを自動的に再起動します。

nodemon gitリポジトリを確認してください:https//github.com/remy/nodemon


私はこのモジュールについて知りませんでした、それは非常に便利なもので、私のdjangoアプリを思い出させます。ありがとう。
Hola Soy Edu Feliz Navidad

素晴らしい提案。コードをすばやくテストするための開発に非常に効率的です。
mbokil 2014年

わかりました、どうすれば、nodeの代わりにnodemonを使用するようにEclipseを構成できますか?
アレクサンダーミルズ

16

この場合、node.jsサーバーはアクティブな開発中であり、常に変更を加えているため、頻繁に再起動します。すべての.jsファイルを監視し、それらのファイルのいずれかが変更された場合はnode.jsサーバーを再起動することで、これを処理する優れたホットリロードスクリプトがあります。迅速な開発とテストのためのチケットです。

スクリプトとその使用方法の説明は、ここドラコブルーにあります。


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に追加することをお勧めします

(これにより、grep自体を除き、名前に「node」が含まれるすべてのプロセスが強制終了されるため、場合によっては、同様の名前の他のプロセスも強制終了される可能性があることに注意してください)


2
私は使用しなければならなかったcut -c17-20
macosx

1
これはまさにそのpkill node目的ではありませんか?
tandrewnichols 2015年

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

また、エスケープ引用符を使用して、バッチファイルで使用することもできます。

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

とても便利な!いい案。
Radmation 2018年

2

コンソールからノードアプリを実行しているだけの場合(永久に使用しないなど)、control + Cを使用します。OSXが同じキーの組み合わせで終了するかどうかはわかりませんが、プロセスIDを見つけて強制終了するよりもはるかに高速です。使用しているチャットアプリに次のコードを入力し、アプリを閉じたいときはいつでもコンソールに「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-9node」を使用すると、「kill -2 [PID]」が機能しなかった場合に機能しました。


1
いいえ、行かないでくださいkill -9。プロセスが正常に終了せず、記述子が孤立したままになり、通常は必要ありません。バニラkillで十分ですが、そうでない場合kill -INTでも十分です。kill -9本当に必要な場合を除いて行かないでください。ほとんどの場合、そうではありません。
ThoriumBR

1

最初にターミナル/コマンドラインを開き、次にプロジェクトディレクトリに移動し、コマンドnpm install nodemon --save-devを使用してnodemonをインストールします。このコマンドは、開発者の依存関係として保存されていることを確認します。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"
  }
}

ここで、package.jsonファイルの「start」値を変更します。本番環境では既存の値を使用しますが、開発ではnodemonを使用してサーバーを再起動せずにソースファイルの変更を追跡します。startの新しい値は "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 jusyをアンインストールするには、コマンドnpm uninstallnodemonを実行するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.