pm2 有点坑?!!
发布于 10 年前 作者 heixiaoshan 16937 次浏览 最后一次编辑是 8 年前

centos 中有3个项目,用pm2启动3个项目。用pm2 list 一看,状态全是启动的。 但是其中有一个访问不了,一直报502(我设置二级域名)。之前一直怀疑是nginx配置的问题,后面又去排查端口。 结果再进程中一看,居然只有其中的2个端口,那么第三个端口呢,怀疑端口冲突,改了好几个。还是无果。 最终试了试npm 启动 ,正常启动。nginx也正常映射,网站也能正常访问了。

不知道有没有大神知道这是怎么回事呢? 最终的原因找到了。 Express 4.x 默认将启动模块分离到了./bin/www中,直接使用 supervisor 无法正常监控应用,使得开发过程中的调试非常不方便。 直接在 app.js 添加 app 模块即可。

var debug = require('debug')('my-application'); // debug模块
app.set('port', process.env.PORT || 3000); // 设定监听端口

// Environment sets...

// module.exports = app; 这是 4.x 默认的配置,分离了 app 模块,将它注释即可,上线时可以重新改回来

//启动监听
var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
之后就可以正常的supervisor app.js进行调试了。
如果需要彻底改变启动方式,还需要修改packages.json

"scripts": {
  "start": "node app.js" // 此处将原本的 'node ./bin/www' 改为 'node app.js'
}

之后运行npm start实际就是node app.js了。

5 回复

碰见过,不过我用的是kraken + pm2,网上说kraken 跟pm2不兼容,现象跟你的一样。后来google到了解决方法。在入口文件 app.js里,不做启动,把启动放到另外一个类A里,app.js 负责new A 和调用A的方法,即可。有点代理模式的想法。

@ccccccc2003 那就是跟express4的模式一样。bin中有个www文件。刚刚想到能否直接去启动www文件。而不是app.js 其本身是一个数组

你的这个问题怎么解决滴 我现在也遇到同样的问题

supervisor 无法正常监控应用 ? 我的可以啊

我也遇到了这种情况, 直接打开bin文件夹,然后Pm2 start www就可以了

回到顶部