当node.js出现故障时,如何自动重启?

时间:2011-04-14 18:50:20

标签: node.js

由于节点基本上是一个单独的进程,当出现严重错误时,整个应用程序都会死掉。

我现在有几个基于express的应用程序,我正在使用一些手动方法来防止延长停机时间(process.on('uncaughtException')和自定义心跳监视器)。

社区的任何建议? 最佳做法?框架?

谢谢! 甲

6 个答案:

答案 0 :(得分:5)

使用forever

之类的内容

或使用supervisor

只需npm link然后sudo supervisor server.js

这些类型的库也支持热重新加载。您可以从命令行使用某些节点,并将节点服务作为子进程运行。还有其他人希望您编写代码以重新加载自身。

理想情况下,您希望向完全成熟的负载均衡器迈进,这是一种安全故障。如果负载均衡器中的单个节点进程崩溃,您希望它能够安静地重新启动并且所有连接和数据都已获救。

就个人而言,我建议supervisor进行开发(由isaacs编写!)和完整的负载均衡器(nginx或节点),用于真实的生产服务器。

当然,您已经运行的多节点服务器并行处理,因为您需要关注多个核心的扩展;)

答案 1 :(得分:3)

使用forever

“一个简单的CLI工具,用于确保给定脚本连续运行(即永远)”

只需使用npm

安装即可
npm install forever

并输入

forever start app.js

答案 2 :(得分:2)

如果您使用的是Ubuntu,可以使用upstart(默认安装)。

$ cat /etc/init/my_app.conf

  

描述“my_app”   作者“我”

     

启动(local-filesystems和net-device-up IFACE = eth0)停止   关闭

     

重生

     

exec sh -c“env NODE_ENV =生产节点/path/myapp/app.js>> /var/log/node.log 2>& 1”

“respawn”表示应用程序将在重新启动时重新启动。

启动应用

  

启动my_app

其他命令

  

man initctl

答案 3 :(得分:1)

尝试查看forever模块。

答案 4 :(得分:1)

我也强烈推荐forever。我昨天用它并且轻而易举:

  1. 安装npm install forever

  2. 启动您的应用forever start myapp.js

  3. 检查其是否有效forever list

  4. 尝试杀死您的应用:

    1. ps

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

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

答案 5 :(得分:0)

您可以尝试使用Fugue,类似于Spark或Unicorn的node.js库:

https://github.com/pgte/fugue

Fugue可以管理任何node.js服务器类型,而不仅仅是Web服务器,并且它被设置和配置为node.js脚本,而不是CLI命令,因此正常的node.js构建&amp;部署工具链可以使用它。