如何从pm2下的群集进程延迟“在线”事件?

我的nodejs应用程序需要一段时间才能接受请求(资源被编译等)。

当我在pm2下以集群模式运行它并触发重新加载时,pm2开始逐个重新加载实例,但是它不会等到应用程序实际上能够接受请求,然后继续重新启动其他实例 – 这会导致所有实例被closures了一段时间。

通过pm2源头看来,它似乎等待来自工作进程的“在线”事件,并且该事件发生得太快。

有没有办法延迟这个在线事件来实现正常的重新加载?

这里是testing用例:

var http = require("http"); setTimeout(() => { var server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("hello\n"); }); server.listen(7000, "127.0.0.1", () => { console.log("server ready"); }); }, 10000); 

pm2 start app -i 2 ,然后尝试使用pm2 reload app 。 在我的机器上,当应用程序完全不响应请求时,大约有4s窗口:

 curl: (7) Failed to connect to localhost port 7000: Connection refused 

(你可以方便地监视应用程序是否在线watch curl -sS localhost:7000

增加GRACEFUL_LISTEN_TIMEOUT值可以解决这个问题 – 默认情况下,它被设置为3秒,这意味着pm2放弃得太快,并继续下一个实例。

你可以改变这个值:

 PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update