当Node.js崩溃时,如何自动重新启动它?

9

因为Node基本上是单进程的,当出现严重问题时,整个应用程序就会崩溃。

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

社区有什么建议吗?最佳实践?框架?

谢谢! A

6个回答

6

使用类似于forever的工具,或者使用supervisor

只需要执行npm link,然后运行sudo supervisor server.js

这些类型的库还支持热重载。有一些是从命令行使用的,它们为您运行节点服务作为子进程。还有其他的,它们期望你编写自己的代码来重新加载。

理想情况下,您希望向全功能负载均衡器迈进,它是故障安全的。如果负载均衡器中的单个节点进程崩溃,您希望它被静默重新启动,并且所有连接和数据都得到保护。

个人建议在开发过程中使用supervisor(它是由Isaacs编写的!),而在实际生产服务器上使用全功能负载均衡器(nginx或node)。

当然,您已经同时运行了多个节点服务器进程,因为您关心跨多个核心进行扩展,对吧 ;)


3

使用 forever

"这是一个简单的CLI工具,可以确保给定的脚本持续运行(即永远运行)"

只需使用npm进行安装即可。

npm install forever

和类型

forever start app.js

2

11年后 ;) forever 有了新的链接。但官方页面鼓励现在使用pm2nodemon - MTK

2
如果您使用的是Ubuntu系统,可以使用默认安装的upstart。在/etc/init/目录下创建my_app.conf文件,并写入以下内容:
``` description "my_app" author "me"
start on (local-filesystems and net-device-up IFACE=eth0) stop on shutdown
respawn
exec sh -c "env NODE_ENV=production node /path/myapp/app.js >> /var/log/node.log 2>&1" ```
其中,“respawn”表示如果应用程序停止运行,则会自动重启。要启动该应用程序,请使用以下命令:
``` start my_app ```
如需了解其他命令,请参考以下命令手册:
``` man initctl ```

1

我强烈推荐使用forever。昨天我用了它,非常容易:

  1. 安装 npm install forever

  2. 启动你的应用程序 forever start myapp.js

  3. 检查是否工作正常 forever list

试着杀死你的应用程序:

  1. ps

  2. 获取你的myapp.js进程ID并运行kill <pid

  3. 运行forever list,你会看到它又在运行了


0
你可以尝试使用 Fugue,这是一个类似于 Spark 或 Unicorn 的适用于 Node.js 的库:

https://github.com/pgte/fugue

Fugue 可以管理任何类型的 node.js 服务器,不仅限于 Web 服务器,并且它是作为一个 node.js 脚本设置和配置的,而不是 CLI 命令,因此普通的 node.js 构建和部署工具链可以使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接