前提:最近开发用到pm2来管理node进程,因为策划要经常修改配置表,于是我就用pm2 watch 了对应的策划对应的配置文件目录,这样一来当策划修改了配置表之后进程就自动重启。很好,这就是我想要的结果。
但是现在问题来了,pm2有2种模式:fork
和cluster
1.fork
模式启动node进程:当策划修改配置表之后,能正常自动重启,而且重启之后node程序也能正常访问,唯一不足的就是如果我的程序里出现的uncaught error
的时候,pm2会把错误日志写入app-out.log文件里而不是app-error.log文件里,这样就会导致当某一天我上来看到进程重启了,我不知道是策划修改配置表导致的,还是我程序里的uncaught error
导致的;
2.cluster
模式启动node进程:当程序里出现uncaught error
的时候,pm2会把错误日志写入app-error.log文件,这样当我发现程序有重启的时候我只用看error.log里是否有日志就知道了。但是cluster
有个问题就是它把node进程restart之后虽然pm2 list命令里看到的status是online但实际node进程是无法访问的。
我试过在cluster
模式下手动执行pm2 restart app
命令之后也是同样的效果。
试过几个pm2 版本从1.x到2.4.x都是这样。
我知道pm2的cluster
模式是可以多启动几个进程以充分利用cpu,但是它restart之后进程并不能访问,那它restart的意义在哪呢?
请教各位前辈!