由于节点基本上是一个单独的进程,当出现严重错误时,整个应用程序都会死掉。
我现在有几个基于express的应用程序,我正在使用一些手动方法来防止延长停机时间(process.on('uncaughtException')和自定义心跳监视器)。
社区的任何建议? 最佳做法?框架?
谢谢! 甲
答案 0 :(得分:5)
使用forever
或使用supervisor
。
只需npm link
然后sudo supervisor server.js
。
这些类型的库也支持热重新加载。您可以从命令行使用某些节点,并将节点服务作为子进程运行。还有其他人希望您编写代码以重新加载自身。
理想情况下,您希望向完全成熟的负载均衡器迈进,这是一种安全故障。如果负载均衡器中的单个节点进程崩溃,您希望它能够安静地重新启动并且所有连接和数据都已获救。
就个人而言,我建议supervisor
进行开发(由isaacs编写!)和完整的负载均衡器(nginx或节点),用于真实的生产服务器。
当然,您已经运行的多节点服务器并行处理,因为您需要关注多个核心的扩展;)
答案 1 :(得分:3)
答案 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
。我昨天用它并且轻而易举:
安装npm install forever
启动您的应用forever start myapp.js
检查其是否有效forever list
尝试杀死您的应用:
ps
获取myapp.js pid并运行kill <pid
运行forever list
,您会看到它再次运行
答案 5 :(得分:0)
您可以尝试使用Fugue,类似于Spark或Unicorn的node.js库:
Fugue可以管理任何node.js服务器类型,而不仅仅是Web服务器,并且它被设置和配置为node.js脚本,而不是CLI命令,因此正常的node.js构建&amp;部署工具链可以使用它。