2016-11-21 223 views
0

我與PM2實驗和具體我測試有像下面這樣的JSON格式的配置文件中聲明我節點應用的功能:爲什麼這些基於pm2的節點進程每隔一兩秒就停止並重新啓動?

{ 
    "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 

...它最初開始罰款,然後每隔一秒左右就停止之間交替,停止和啓動(當我使用監視monit的PM2它)

我檢查錯誤日誌,我看到重複LY:

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); 

注:

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

包含繼承人我在這(server.js和server2.js)測試節點服務器中的JS我都嘗試process.env.NODE_PORT和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(process);和console.log(process.env),我根本沒有看到PORT。我難倒了! – tamak

回答

0

這可能是完全不相干,但直到我刪除了所有在JSON文件中鍵的雙引號除了ENV部分PM2並沒有爲我工作。

所以它會看起來像:

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

再次,可能不是您的系統上的問題,但PM2不會解析的json正確,否則。我的例子是pm2如何顯示在他們的快速入門指南。

另一種選擇,這是我去的路線,是加載你的配置在一個單獨的配置JSON,並要求它在你的節點的應用程序。

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

做這樣的說法給人利用PM2的手錶功能的好處。如果您現在將pm2的手錶設置爲真,如果您只希望在配置更改時重新加載,請將其設置爲 請觀看:「config.json」

然後,如果需要更改配置,則可以進行更改,保存並且pm2會爲您重新啓動應用程序。如果您需要更改配置,例如它所運行的端口,方便使用。與其修改pm2配置並停止/重新啓動容器,您可以修改apps配置並讓pm2爲您重新啓動應用程序,這通常比停止/啓動容器快得多。

0

基本上,您的節點應用程序中存在一些錯誤。默認情況下,當PM2啓動您的節點應用程序並且它退出時出現錯誤,PM2將自動嘗試並重新啓動它。因此,您可能會發現運行PM2 ls顯示您的應用程序不斷重新啓動。如果你沒有在你的配置文件中設置限制,它可能會繼續,直到你手動終止進程