【发布时间】:2013-04-01 05:49:38
【问题描述】:
在我的应用程序中,我使用 uncaughtException 来处理应用程序错误。在此我如何重新启动服务器。
【问题讨论】:
标签: node.js uncaught-exception
在我的应用程序中,我使用 uncaughtException 来处理应用程序错误。在此我如何重新启动服务器。
【问题讨论】:
标签: node.js uncaught-exception
npm install forever
forever 将在您的服务器退出时重新启动,无论出于何种原因。
这意味着您可以随时在您的代码中使用process.exit(); 来重新启动服务器。
您需要一个启动和停止脚本才能永久参与。
典型的启动脚本如下所示。
#!/bin/sh
./node_modules/forever/bin/forever \
start \
-al log.forever \
-ao log.traffic \
-ae log.errors \
app.js
典型的停止脚本如下所示:
#!/bin/sh
./node_modules/forever/bin/forever stop app.js
在您的异常处理代码中应该是这样的:
process.on('uncaughtException', function (err) {
console.log(err.stack);
process.exit();
});
【讨论】:
您可以使用内置的nodejs cluster 功能。使用此模块,您可以设置一个 master 和一些 worker,当一个 worker 死亡时,您可以生成一个新的。我最近的一个项目的一个例子:
var cluster = require('cluster'),
numCpus = require('os').cpus().length;
if (cluster.isMaster) {
for (var i = 0; i < numCpus; i++) {
console.log("Spawning worker...");
cluster.fork();
}
cluster.on('exit', function (worker) {
console.log("Worker " + worker.pid + " died");
var newWorker = cluster.fork();
console.log("Spawning new worker " + newWorker.pid);
});
}
【讨论】:
Forever 运行良好且设置简单
您也可以通过子堆栈尝试fleet。 Fleet 使将代码部署到一台或多台服务器变得非常容易。然后您可以使用fleet spawn -- node ... 生成您的服务器进程,并且fleet 将自动重新启动任何崩溃的进程
【讨论】: