2016-04-13 30 views
0

我正在嘗試使用ExpressJS應用程序使用pm2進程管理器。第一個實例運行並正常工作,但其他人不斷地使用EADDRINUSE崩潰並一次又一次地運行。所以我想知道我做錯了什麼?pm2無法創建expressjs的多個實例 - EADDRINUSE端口在使用中錯誤

我跑PM2與下一個命令:爲PM2

pm2 start process.json 

process.json配置文件看起來像:

{ 
    "apps": [ 
    { 
     "name": "clinical-trials", 
     "script": "./bin/www", 
     "instances": 0, 
     "env": { 
     "PORT" : 4000, 
     "NODE_ENV": "development" 
     }, 
     "env_production": { 
     "PORT": 4444, 
     "NODE_ENV": "production" 
     }, 
     "env_local": { 
     "PORT" : 4000, 
     "NODE_ENV": "local" 
     } 
    } 
    ] 
} 

快遞./bin/www包含下面的代碼:

var port = normalizePort(process.env.PORT || app.locals.config.port); 
app.set('port', port); 
var server = http.createServer(app); 
server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

在PM2回購示例文件夾他們有8000個端口上監聽的子進程: https://github.com/Unitech/pm2/blob/master/examples/child.js 和配置文件在運行4個實例: https://github.com/Unitech/pm2/blob/master/examples/apps/all-pm2.json

+0

每個端口只能由單個實例使用。 – alexmac

+0

您是否有意將'process.json'的'instances'字段設置爲0? –

+0

你的意思是:執行'pm2 start process.json'正常啓動,然後執行'pm2 start process.json --env local'得到EADDRINUSE,對嗎? –

回答

0

的問題是在PM2試圖運行在叉模式,而不是集羣實例。要解決這個問題,我必須將"exec_mode": cluster添加到process.json文件。 :

{ 
    "apps": [ 
    { 
     "name": "clinical-trials", 
     "script": "./bin/www", 
     "instances": 0, 
     "exec_mode": "cluster", 
     "env": { 
     "PORT" : 4000, 
     "NODE_ENV": "development" 
     }, 
     "env_production": { 
     "PORT": 4444, 
     "NODE_ENV": "production" 
     }, 
     "env_local": { 
     "PORT" : 4000, 
     "NODE_ENV": "local" 
     } 
    } 
    ] 
} 
相關問題