Node.js:优雅的重启和服务器正常运行时间,如何操作
Node.js : graceful restarts and server uptime, howto?
我一直在使用Node.js
和Socket.io
开发实时应用程序,我想把它从本地测试阶段带到我们的一些用户那里进行测试。问题是,如果我关闭与服务器的ssh会话,它也会停止我开始使用node app.js
的服务器
我曾想过使用nohup,
,但偶尔会出现分段错误或其他随机错误,导致服务器瘫痪。我需要知道我的服务器何时崩溃(希望是为什么),这样我既可以改进它以减少崩溃,也可以确保重新启动它。此外,我不能全天候清醒来重新启动服务器,所以拥有某种daemon
会很好。
我发现forever
可以通过npm使用,但它与比0.8.x
更新的Node版本不兼容,而且我正在运行0.9.1
,而且它似乎没有得到很好的维护。
我也无意中通过了distribution
和up
,但似乎缺乏使用它们构建一个像样的应用程序的文档和示例。
然后使用cluster
和os
模块得到这个答案。https://stackoverflow.com/a/10997753/1883464
但Node将集群列为实验性集群http://nodejs.org/api/cluster.html
由于缺乏关于在真实生产环境中保持Node服务器运行(以及更新其代码!)的答案、示例和讨论,我开始觉得我是第一个想部署他们的应用程序的人;)不知怎么的,我确信这个问题有一些我没有找到的常见答案。
操作系统提供的init系统提供了许多优于任何Node.js模块的优势。连接到init系统是确保应用程序在重新启动后自动启动的唯一方法。
我们使用Ubuntu和Upstart非常成功。Upstart将在崩溃时重新启动应用程序,并可以在运行进程之前设置用户id/组不以Root身份运行。
编写启动文件有点麻烦,我们使用Node Foreman从应用程序Procfile
中自动生成和导出一组启动文件。
npm i -g foreman
cd MY_APP
nf export -o /etc/init
这将在/etc/init
中放置一组启动文件,这些文件可以使用sudo start foreman
和sudo stop foreman
启动和停止。
Upstart并不是唯一的解决方案,可以根据需要对以上内容进行调整以适合其他操作系统。在Redhat上,我建议查看systemd
。我不建议在生产中使用Mac OSX,但在必要的时候它有launchd
。
- HTML5画布-暂停时的运行时间
- 如何在Node.js中获得服务器正常运行时间
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 在JS中获取运行时间
- JQuery 选择器运行时间
- 使用属性获取对象值的运行时间
- Google Apps 脚本在保护多个范围时运行时间非常慢
- Node.js以及如何在应用程序中获得正常运行时间/启动时间
- 使用javascript计算运行时间
- 如何格式化setInterval方法JavaScript的运行时间
- requestAnimationFrame计算运行时间
- 使用AJAX将客户端运行时间记录到服务器日志文件中
- Javascript运行时间过长
- Jquery加载不同的内容,并使用仍在运行的js操作加载的内容
- 如何取消AJAX长期运行的MVC操作客户端(javascript)
- 在javascript中引用数组的运行时间
- 加快javascript运行时间
- 如何将Javascript运行时间放在INPUT标记中
- 如何在长时间运行的服务器操作期间与用户交互(例如确认对话框)
- Node.js:优雅的重启和服务器正常运行时间,如何操作