1

在我的应用程序中,我使用 uncaughtException 来处理应用程序错误。在此我如何重新启动服务器。

4

3 回答 3

5

使用永远模块

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();
});
于 2013-04-01T05:55:42.653 回答
1

您可以使用内置的nodejs 集群功能。使用此模块,您可以设置一个 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);
    });

}
于 2013-04-01T05:59:38.987 回答
0

Forever 运行良好且设置简单

您也可以按子堆栈尝试舰队。Fleet 使将代码部署到一台或多台服务器变得非常容易。然后您可以使用生成您的服务器进程,fleet spawn -- node ...并且舰队将自动重新启动任何崩溃的进程

于 2013-04-01T13:09:52.403 回答