群集结束时,“状态从崩溃变为崩溃”。它应该fork()

时间:2014-01-08 12:28:21

标签: node.js heroku

我有一个主从应用程序。 在我的计算机上,一切正常:当一个奴隶死于一个 process.exit(0),我分叉,然后继续。

我抓住它,

cluster.on('exit', function(worker, code, signal) {
    if(code == 0){
        cluster.fork();
    }
});

可悲的是,在Heroku上,一旦slave执行process.exit(0)"State changed from up to crashed"

有想法绕过Heroku保护措施吗?

1 个答案:

答案 0 :(得分:4)

Heroku dynos是一个虚拟应用程序容器,使用buildpacks中的必需二进制文件构建,并与应用程序代码的发布相结合。此应用容器的唯一作业是运行Procfile描述的流程。

如果该进程意外终止,Heroku认为dyno崩溃并将尝试重新启动该进程。此外,如果应用程序在60秒内未绑定到指定的PORT,则dyno将崩溃。

如果你的后端工作进程在出现时没有绑定到端口,那么在发出process.exit(0)之前,它们永远不会监听端口。如果dyno在超时内没有绑定到端口,Heroku会认为它崩溃了。

我的猜测是你立即退出每个子工作进程,导致master分叉N个子进程,然后重新分叉每个进程,直到命中引导超时。