【问题标题】:In node.js how to restart the server while handling some exception in uncaughtException在node.js中如何在处理uncaughtException中的一些异常时重新启动服务器
【发布时间】:2013-04-01 05:49:38
【问题描述】:

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

【问题讨论】:

    标签: node.js uncaught-exception


    【解决方案1】:

    使用forever module

    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();
    });
    

    【讨论】:

    • 你能告诉我如何调用forever方法吗?
    • process.exit(); //这将重新启动我的服务器。为此我必须永远安装我是对的。
    【解决方案2】:

    您可以使用内置的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);
        });
    
    }
    

    【讨论】:

      【解决方案3】:

      Forever 运行良好且设置简单

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 2016-07-13
        • 2023-03-25
        • 2018-08-13
        • 1970-01-01
        相关资源
        最近更新 更多