当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 。 我昨天使用它,很容易:

  1. npm install forever安装npm install forever

  2. 启动你的应用程序forever start myapp.js

  3. 检查它的工作是否forever list

尝试杀死你的应用程序

  1. ps

  2. 获取你的myapp.js pid并运行kill <pid

  3. forever list运行forever list ,你会看到它再次运行

你可以尝试使用赋格,类似于Spark或Unicorn的node.js库:

https://github.com/pgte/fugue

赋格可以pipe理任何node.js服务器types,不仅仅是web服务器,而且它被设置和configuration为node.js脚本,而不是CLI命令,所以正常的node.js构build和部署工具链可以使用它。