web-dev-qa-db-ja.com

永久に使用すると、ノードアプリのプロセスが停止し続けるのはなぜですか?

無料利用枠のAmazonEC2インスタンスで、Expressで実行される単純なnode.js HelloWorldアプリをセットアップしました。

npm startを実行すると、アプリは正常に実行され、ブラウザーからヒットできます。次の出力が表示されます。

> [email protected] start /home/ec2-user/app
> node ./bin/www

Foreverツールをグローバルにインストールしました。 forever start app.jsを実行すると、次のように表示されます。

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app/app.js

ただし、forever listを確認すると、プロセスが停止していることがわかります。

info:    Forever processes running
data:        uid  command             script forever pid  id logfile                          uptime  
data:    [0] 2v0J /usr/local/bin/node app.js 2455    2457    /home/ec2-user/.forever/2v0J.log STOPPED 

これはログ内の唯一のメッセージです:error: Forever detected script was killed by signal: null

他のログ情報が見つかりません。なぜすぐに停止し続けるのですか?

編集:Nohup forever start app.jsとして実行しようとしましたが、同じ問題が発生しました。 forever startforever listを同じsshセッションで次々に実行しています。アプリのプロセスはすぐに停止するようです。

13
Brandon

同様の質問に対するこの回答のおかげで、問題を解決することができました: https://stackoverflow.com/a/24914916/1791634

App.jsを渡す代わりにforever start ./bin/wwwを使用した場合、プロセスは実行され続けました

これが今後問題を引き起こすかどうかはまだ分からない。

4
Brandon

Sshから切断した後、プロセスが停止すると思いますか?

最初にNohupを使用して永久に実行してみてください。

Nohup forever start app.js

Sshから切断すると、サーバーはシェルのすべての子プロセスを強制終了します。 Nohupは、プロセスをその親シェルから切断します。

6
Daniel

私にとっては、「Sudoforever」を使用する必要がありました。

1
Erik Villegas