我有一个主从应用程序。
在我的计算机上,一切正常:当一个奴隶死于一个
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保护措施吗?
答案 0 :(得分:4)
Heroku dynos是一个虚拟应用程序容器,使用buildpacks中的必需二进制文件构建,并与应用程序代码的发布相结合。此应用容器的唯一作业是运行Procfile
描述的流程。
如果该进程意外终止,Heroku认为dyno崩溃并将尝试重新启动该进程。此外,如果应用程序在60秒内未绑定到指定的PORT
,则dyno将崩溃。
如果你的后端工作进程在出现时没有绑定到端口,那么在发出process.exit(0)
之前,它们永远不会监听端口。如果dyno在超时内没有绑定到端口,Heroku会认为它崩溃了。
我的猜测是你立即退出每个子工作进程,导致master分叉N
个子进程,然后重新分叉每个进程,直到命中引导超时。