我一直在使用Node.js
和Socket.io
开发实时应用,我想从本地测试阶段将其与一些用户一起测试。问题是,如果我关闭ssh会话到我的服务器它也会停止我开始使用node app.js
我考虑过使用nohup,
但我偶尔会遇到分段错误或其他随机错误导致服务器崩溃的问题。我需要1)知道什么时候(并且希望为什么)我的服务器崩溃所以我可以努力改进它以减少崩溃并确保重新启动它。另外,我不能每周7天每天24小时醒来重启服务器,所以有一些daemon
会很可爱。
我通过npm发现forever
可用,但它与0.8.x
以后的版本的版本不兼容,并且我正在运行0.9.1
,而且看起来不像它得到了很好的维护。
我也偶然发现了distribution
和up
,但似乎缺乏使用它们构建体面应用的文档和示例。
然后使用cluster
和os
模块得到了这个答案。 https://stackoverflow.com/a/10997753/1883464
但Node将群集列为实验http://nodejs.org/api/cluster.html
由于缺乏在实际生产环境中保持节点服务器正常运行(以及更新代码!)的答案,示例和讨论,我开始觉得我是第一个想要服用他们的人应用程序部署;)不知何故,我确定有一些我没有找到的问题的常见答案。
答案 0 :(得分:2)
OS提供的init系统提供了超过任何Node.js模块的许多优势。 连接到init系统是确保应用程序在重新启动后自动启动的唯一方法。
我们使用Ubuntu和Upstart取得了很大的成功。 Upstart会在崩溃时重新启动应用程序,并可以在运行进程之前设置用户ID /组。 不以root身份运行。
编写Upstart文件有点麻烦,我们使用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
。