web-dev-qa-db-ja.com

node.jsアプリケーションを永続的に実行する方法

DebianサーバにNode.jsをインストールしました。私はこのコマンドラインでPuTTYからアプリを起動する方法を理解しています。

node /srv/www/MyUserAccount/server/server.js

そしてアドレス50.51.52.53:8080(IPとポート)でそれに行きなさい。

しかし、PuTTYを終了するとすぐに、アドレス50.51.52.53:8080にアクセスできなくなります。

Node.jsアプリケーションを永続的に実行する方法

ご想像のとおり、私はLinuxとNode.jsの初心者です。

221
Sam

他の答えはOPの問題を解決しますが、それらはすべてやり過ぎで、なぜ彼または彼女がこの問題を経験しているのか説明しません。

重要なのはこの行です、「私はPuTTYを閉じます、それから私は住所にたどり着けません」

あなたがPuTTYであなたのリモートホストにログインしたとき、あなたはSSH linuxプロセスを開始しました、そしてそのSSHセッションからタイプされたすべてのコマンドはそのプロセスの子供として実行されるでしょう。

あなたの問題は、PuTTYを閉じるとSSHセッションを終了してそのプロセスとすべてのアクティブな子プロセスが終了することです。 PuTTYを閉じると、フォアグラウンドでサーバーを実行したため、誤ってサーバーを強制終了しました。この動作を回避するには、コマンドに&を追加して、バックグラウンドでサーバーを実行します。

node /srv/www/MyUserAccount/server/server.js &

ここでの問題は、Linuxに関する知識の欠如であり、ノードに関する問題ではありません。いくつかのより多くの情報チェックアウトのために: http://linuxconfig.org/understanding-foreground-and-background-linux-processes

更新:

他の人が述べたように、端末を出るときにノードサーバはまだ死ぬかもしれません。私が遭遇した共通の問題は、ノードプロセスがbgで実行されていても、それは標準出力であり、標準エラー出力は依然として端末に向けられているということです。つまり、ノードサーバーがconsole.logまたはconsole.errorに書き込むと、パイプの破損エラーが発生してクラッシュします。これはあなたのプロセスの出力をパイプすることで回避できます。

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

それでも問題が解決しない場合は、tmuxまたはNohupのように検討する必要があります。それらはあらゆる種類のプロセス(データベース、ロギングサービス、他の言語)を実行するために使用することができます。

Nohup node your_path/server.js &を実行した後に、単にクリックするだけでPuTTY端末を閉じることが、サーバを終了させる可能性がある一般的な間違いです。代わりにexitコマンドを使用してください。そうすれば、あなたのノードサーバは稼働するでしょう。

189
DogNibbler

次のようにnpmを使って 永遠に インストールすることができます。

Sudo npm install -g forever

そして、次のようにしてアプリケーションを起動します。

forever server.js

またはサービスとして:

forever start server.js

何らかの理由でアプリケーションがクラッシュまたは停止したときに、アプリケーションを永久に再起動します。再起動を5に制限するには、次のようにします。

forever -m5 server.js

実行中のすべてのプロセスを一覧表示するには

forever list

かっこ内の整数に注意して、プロセスを停止するために次のように使用します。

forever stop 0

実行中のプロセスを再起動すると、次のようになります。

forever restart 0

アプリケーションファイルで作業している場合は、-wファイルが変更されるたびにserver.jsパラメータを使用して自動的に再起動することができます。

forever -w server.js
307
N20

あなたは PM2 を使うことができます。これは組み込みのロードバランサーを持つNode.jsアプリケーションのためのプロダクションプロセスマネージャです。

PM2をインストール

$ npm install pm2 -g

アプリケーションを起動する

$ pm2 start app.js

あなたはエクスプレスを使用しているなら、あなたはあなたのようにあなたのアプリを起動することができます

pm2 start ./bin/www --name="app"

実行中のすべてのプロセスを一覧表示します。

$ pm2 list

すべてのプロセスが一覧表示されます。その後、次のコマンドでアプリのIDまたは名前を使用してサービスを停止/再開できます。

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

ログを表示する

$ pm2 logs ['all'|app_name|app_id]
69

クラッシュが発生した場合にNodeを再起動するために、 Forever のようなものを探し、これをデーモン化することを扱うことをお勧めします。

40
Brad

あなたがいつも端末であなたのノードアプリを走らせたいだけなら、ただスクリーンを使いなさい。

Ubuntu/debianにインストールしてください。

Sudo apt-get install screen

使用法:

$ screen
$ node /path/to/app.js

ctrl + aそしてctrl + dを却下する

得るために戻ってきた:

1画面:screen -r

複数ある場合は、すべての画面を一覧表示できます。screen -ls

そして:screen -r pid_number

32
film42

あなたは単にこれを使うことができます

Nohup node /srv/www/MyUserAccount/server/server.js &

これはアプリケーションを実行し続け、それをシャットダウンするためにはあなたはそれを殺さなければならないでしょう。

そのためにはhtopをインストールしてからnodeを検索しそれをkillすることができます

22
Rick Roy

Forever はまさにそれをするためのとても良いNodeJsモジュールです。

コマンドラインに入力してforeverをインストールする

$ npm install forever -g

その後、次のコマンドを使用してnode.jsスクリプトを実行します。

$ forever start /path/to/script.js

準備できた。さらにあなたは実行することができます

$ forever list

実行中のスクリプトをすべて見る次のように入力して、特定のスクリプトを終了できます。

$ forever stop [pid]

[pid]は、listコマンドから取得するスクリプトのプロセスIDです。すべてのスクリプトを停止するには、次のように入力します。

$ forever stopall
10
user4846835

Nohup作業中にチェックインAWS Ubuntovm正しいsyntaxに従う

ubuntu@ip-172-00-00-00:~/ms$ Nohup node server.js &

enterキーを押すと、この行が表示されます

ubuntu@ip-172-00-00-00:~/ms$ Nohup: ignoring input and appending output to ‘Nohup.out’

それからこれをタイプしなさい

rm Nohup.out

enter image description here

9
Adiii

開発中は、 nodemon を使用することをお勧めします。ファイルが変更されるたびにサーバーを再起動します。他の人が指摘しているように、 Forever はオプションですが、プロダクションでは、使用しているプラ​​ットフォームにすべて依存します。通常は、オペレーティングシステムが推奨するサービス維持方法を使用することをお勧めします(例: http://www.freedesktop.org/wiki/Software/systemd/ )。

8
Olivier Lalonde

これが私の個人的なプロジェクトのために使ってきた upstart の解決策です:

/etc/init/node_app_daemon.confに配置してください。

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec Sudo -u user /usr/bin/node server.js
end script

これは、クラッシュした場合にアプリケーションを再生成することも処理します。 15秒以内に3回以上クラッシュした場合、アプリケーションを再起動しようとします。

8
Adam Eberlin

Installation

$ [Sudo] npm install forever -g

あなたはスクリプトを継続的に実行するために永遠に使うことができます

forever start server.js

forever list

ストップサービス用

forever stop server.js
8
Sudhir singh

私はその仕事を完璧にうまくやることを永遠に見つけました。

既にnpmがインストールされていると仮定して、そうでなければ、

Sudo apt-get install npm

それから永遠にインストール

npm install forever --global

今、あなたはこのようにそれを走らせることができます

forever start app.js

https://codingweb.io/run-nodejs-application-background/

6
erax

最初にpm2をグローバルにインストールする

npm install -g pm2

それから始めなさい

pm2 start bin/www 
4

もう1つの方法は、アプリケーション用のシステムユニットを作成することです。次のように、 "/ etc/systemd/system"フォルダに "XXX.service"ファイルを作成します。

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

利点は、アプリがサービスとして実行され、クラッシュした場合は自動的に再起動されることです。

Sytemctlを使って管理することもできます。

systemctl start XXXはサービスを開始し、systemctl stop XXXはサービスを停止し、systemctl enable XXXはシステムの起動時に自動的にアプリケーションを開始します。

4
Alex

これがお役に立てば幸いです。

コマンドラインで、永遠にインストールします。

npm install forever -g

サンプルファイルを作成します。

Sudo nano server.js 

ファイルを編集してブラウザで直接結果を得ることができます。
ファイルの編集には、filezillaまたは他のエディタを使用できます。このコマンドを実行してファイルを実行します。

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

enter image description here

2

Node.jsアプリケーションのプロセスマネージャであるPM2を使用することをお勧めします。 PM2は、アプリケーションを管理およびデーモン化する(サービスとして実行する)ための簡単な方法を提供します。

このリンクを参照してください - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

1
vishwa

他のパッケージをインストールする必要はありません。

このコマンドを実行

node server.js > stdout.txt 2> stderr.txt &

server.jsはサーバーファイルですが、api.jsでもかまいません。

その後、「exit」を押して端末を閉じます

exit
0
Gajender Singh