Node.js:优雅的重启和服务器正常运行时间,如何操作

Node.js : graceful restarts and server uptime, howto?

本文关键字:运行时间 何操作 操作 js 服务器 重启 Node      更新时间:2023-09-26

我一直在使用Node.jsSocket.io开发实时应用程序,我想把它从本地测试阶段带到我们的一些用户那里进行测试。问题是,如果我关闭与服务器的ssh会话,它也会停止我开始使用node app.js 的服务器

我曾想过使用nohup,,但偶尔会出现分段错误或其他随机错误,导致服务器瘫痪。我需要知道我的服务器何时崩溃(希望是为什么),这样我既可以改进它以减少崩溃,也可以确保重新启动它。此外,我不能全天候清醒来重新启动服务器,所以拥有某种daemon会很好。

我发现forever可以通过npm使用,但它与比0.8.x更新的Node版本不兼容,而且我正在运行0.9.1,而且它似乎没有得到很好的维护。

我也无意中通过了distributionup,但似乎缺乏使用它们构建一个像样的应用程序的文档和示例。

然后使用clusteros模块得到这个答案。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 foremansudo stop foreman启动和停止。

Upstart并不是唯一的解决方案,可以根据需要对以上内容进行调整以适合其他操作系统。在Redhat上,我建议查看systemd。我不建议在生产中使用Mac OSX,但在必要的时候它有launchd