当node.js发生故障时,如何自动恢复?
由于节点基本上是一个单一的过程,当某些事情发生严重错误时,整个应用程序就会死亡。
我现在有几个应用程序build立在快速和我使用一些手动方法,以防止延长停机时间(process.on('uncaughtException')和自定义心跳监视器)。
来自社区的任何build议? 最佳做法? 构架?
谢谢! 一个
使用像forever
东西
或使用supervisor
。
只是npm link
,然后sudo supervisor server.js
。
这些types的库也支持热重载。 有一些从命令行使用,他们运行节点服务作为subprocess。 还有其他人希望你写你的代码来重新加载自己。
理想情况下,你想要走向一个完整的负载平衡器,这是失败的安全。 如果负载平衡器中的单个节点进程崩溃,则需要安静地重启所有连接和数据。
就个人而言,我会build议supervisor
进行开发(这是由isaacs!写的)和一个完整的负载平衡器(nginx或节点)为您的真正的生产服务器。
当然,你已经在运行的多节点服务器并行处理,因为你关心跨多核心扩展的权利;)
永远使用。
“一个简单的CLI工具,用于确保给定的脚本连续运行(即永远)”
只需使用npm进行安装
npm install forever
和types
forever start app.js
如果你使用Ubuntu,你可以使用upstart(默认安装)。
$ cat /etc/init/my_app.conf
描述“my_app”作者“我”
启动(本地文件系统和networking设备上的IFACE = eth0)closures时停止
重生
exec sh -c“env NODE_ENV =生产节点/path/myapp/app.js >> /var/log/node.log 2>&1”
“重生”意味着如果应用程序死亡,应用程序将重新启动。
启动应用程序
启动my_app
对于其他命令
男人initctl
试着看永远的模块。
我也强烈build议forever
。 我昨天使用它,很容易:
-
npm install forever
安装npm install forever
-
启动你的应用程序
forever start myapp.js
-
检查它的工作是否
forever list
尝试杀死你的应用程序
-
ps
-
获取你的myapp.js pid并运行
kill <pid
-
forever list
运行forever list
,你会看到它再次运行
你可以尝试使用赋格,类似于Spark或Unicorn的node.js库:
赋格可以pipe理任何node.js服务器types,不仅仅是web服务器,而且它被设置和configuration为node.js脚本,而不是CLI命令,所以正常的node.js构build和部署工具链可以使用它。