2016-11-21 5 views
0

私はPM2を試してよ、具体的に、私は私のノードのアプリケーションは次のようにJSON形式の構成ファイルで宣言持つ能力をテストしています:なぜこれらのpm2ベースのノードプロセスは2秒おきに停止して再起動しますか?

{ 
    "apps": [ 
    { 
     "exec_mode": "cluster_mode", 
     "script": "./server.js", 
     "name": "proj-0", 
     "watch": true, 
     "max_memory_restart": "500G", 
     "env": { 
     "NODE_ENV": "development", 
     "PORT": 3000 
     }, 
     "error_file": "./logs/proj-0_test.err.log", 
     "out_file": "./logs/logs/proj-0_test.out.log" 
    }, 
    { 
     "exec_mode": "cluster_mode", 
     "script": "./server2.js", 
     "name": "proj-1", 
     "watch": true, 
     "max_memory_restart": "500G", 
     "env": { 
     "NODE_ENV": "development", 
     "PORT": 3001 
     }, 
     "error_file": "./logs/proj-1_test.err.log", 
     "out_file": "./logs/logs/proj-1_test.out.log" 
    } 
    ] 
} 

私はCLIコマンドを使用してPM2を起動する場合:

pm2 start configuration_test.json 

...それは最初に罰金を開始し、その後、毎秒またはそれが停止とを交互に、停止し、(私はPM2のMONITを使用して、それを監視する場合)を起動

私は、エラーログをチェックし、私は繰り返し見ますLY:私はprocess.env.NODE_PORT両方を試みた:

var http = require('http'); 
var process = require('process'); 

http.createServer(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world. PID: " + process.pid + ". " +  process.env.NODE_PORT); 
}).listen(process.env.NODE_PORT); 

注:私はこの(server.jsとserver2.js)でテストしていたノード・サーバ内に含ま

相続人
RangeError: "port" argument must be >= 0 and < 65536 

JSそしてprocess.env.port

また、私は次のようにポートを設定し、ノードプロセスを実行するとうまく動作します。

.listen(3000); 

(エラーログに表示される内容に基づいて)ポート割り当てが有効でないように見えるのはなぜですか?これが機能するためには何を変更する必要がありますか?

私はpm2バージョン2.1.5とNode.jsバージョン6.2.2を使用しています。

+0

'NODE_PORT'と' port'を試しましたが、 'PORT'を試しましたか? – david

+0

@davidありがとう、はい、私はしました。 – tamak

+0

@david私もconsole.log(プロセス)しました。とconsole.log(process.env)と私はそこにポートが表示されません。私は困った! – tamak

答えて

0

これは完全に無関係かもしれませんが、jsonファイル内のenv部分以外のすべてのキーから二重引用符を削除するまでpm2はうまく動作しませんでした。

だから、それは次のようになりたい:再び

max_memory_restart: "500G", 
env : { 
    "NODE_ENV": "development", 
    "PORT": 3000 
}, 

、お使いのシステム上の問題ではないかもしれないが、PM2が正しくそれ以外の場合は私のJSONを解析しないでしょう。私の例は、pm2がクイックスタートガイドにどのように表示されるかです。

もう1つの選択肢は、これが私が行ったルートです。これは、別の設定jsonで設定をロードして、ノードアプリケーションで設定することです。

config = require("config.json"); 
.listen(config.port) 

このようにすると、pm2の時計機能を活用するという追加の利点が得られます。 「config.json」

を次にあなたが設定変更を行うために必要であれば、あなたはできます:あなたが現在持っている場合は、あなただけの設定は、あなたが 時計に設定することができ変更した場合、リロードすることを望んでいた場合はPM2年代には、trueに設定腕時計それを保存してpm2があなたのためにアプリを再起動します。実行中のポートのような設定を変更する必要がある場合は便利です。 pm2の設定を変更してコンテナを停止/再起動するのではなく、アプリケーションの設定を変更して、pm2でアプリを再起動させることができます。

0

基本的に、ノードアプリケーションにはいくつかのエラーがあります。デフォルトでは、PM2がノードアプリケーションを起動してエラーで終了すると、PM2は自動的に再試行して再起動します。したがって、PM2を実行すると、アプリが個別に再起動し続けることがわかります。設定ファイルに制限を設定していない場合、手動でプロセスをkillするまで続けるかもしれません。

関連する問題