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の初心者です。
他の答えは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
コマンドを使用してください。そうすれば、あなたのノードサーバは稼働するでしょう。
次のように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
あなたは 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]
クラッシュが発生した場合にNodeを再起動するために、 Forever のようなものを探し、これをデーモン化することを扱うことをお勧めします。
あなたがいつも端末であなたのノードアプリを走らせたいだけなら、ただスクリーンを使いなさい。
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
あなたは単にこれを使うことができます
Nohup node /srv/www/MyUserAccount/server/server.js &
これはアプリケーションを実行し続け、それをシャットダウンするためにはあなたはそれを殺さなければならないでしょう。
そのためにはhtop
をインストールしてからnodeを検索しそれをkillすることができます
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
開発中は、 nodemon を使用することをお勧めします。ファイルが変更されるたびにサーバーを再起動します。他の人が指摘しているように、 Forever はオプションですが、プロダクションでは、使用しているプラットフォームにすべて依存します。通常は、オペレーティングシステムが推奨するサービス維持方法を使用することをお勧めします(例: http://www.freedesktop.org/wiki/Software/systemd/ )。
これが私の個人的なプロジェクトのために使ってきた 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回以上クラッシュした場合、アプリケーションを再起動しようとします。
Installation
$ [Sudo] npm install forever -g
あなたはスクリプトを継続的に実行するために永遠に使うことができます
forever start server.js
forever list
ストップサービス用
forever stop server.js
私はその仕事を完璧にうまくやることを永遠に見つけました。
既にnpmがインストールされていると仮定して、そうでなければ、
Sudo apt-get install npm
それから永遠にインストール
npm install forever --global
今、あなたはこのようにそれを走らせることができます
forever start app.js
最初にpm2をグローバルにインストールする
npm install -g pm2
それから始めなさい
pm2 start bin/www
もう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
はシステムの起動時に自動的にアプリケーションを開始します。
Node.jsアプリケーションのプロセスマネージャであるPM2を使用することをお勧めします。 PM2は、アプリケーションを管理およびデーモン化する(サービスとして実行する)ための簡単な方法を提供します。
このリンクを参照してください - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
他のパッケージをインストールする必要はありません。
このコマンドを実行
node server.js > stdout.txt 2> stderr.txt &
server.jsはサーバーファイルですが、api.jsでもかまいません。
その後、「exit」を押して端末を閉じます
exit