node.js - NodeJS API 服务失败如何重启?

标签 node.js linux cluster-computing prometheus

我有类似的 NodeJS 代码:

cluster.js

'use strict';

const cluster = require('cluster');
var express = require('express');
const metricsServer = express();
const AggregatorRegistry = require('prom-client').AggregatorRegistry;
const aggregatorRegistry = new AggregatorRegistry();
var os = require('os');

if (cluster.isMaster) {
    for (let i = 0; i < os.cpus().length; i++) {
        cluster.fork();
    }

    metricsServer.get('/metrics', (req, res) => {
        aggregatorRegistry.clusterMetrics((err, metrics) => {
            if (err) console.log(err);
            res.set('Content-Type', aggregatorRegistry.contentType);
            res.send(metrics);
        });
    });

    metricsServer.listen(3013);
    console.log(
        'Cluster metrics server listening to 3013, metrics exposed on /metrics'
    );
} else {
    require('./app.js'); // Here it'll handle all of our API service and it'll run under port 3000
}

正如您在上面的代码中看到的,我使用的是 NodeJS 手动集群方法而不是 PM2 集群,因为我需要通过 Prometheus 监控我的 API。我通常通过 pm2 start cluster.js 启动 cluster.js,但是由于某些数据库连接,我们的 app.js 服务失败但 cluster.js 没有。看起来我还没有处理数据库连接错误,即使我没有处理它。我想知道,

  • 如何确保我的 app.js 和 cluster.js 在崩溃时始终重新启动?

  • 是否有 Linux crontab 可以用来检查某些端口是否一直在运行(即 3000 和 3013)? (如果这是个好主意,请提供代码,我将不胜感激,我对 Linux 不太熟悉)

  • 或者我可以部署另一个 NodeJS api 来检查某些服务是否正在运行,但由于我的 API 是实时的并且会捕获一定量的负载;我不太乐意这样做?

如有任何帮助,我们将不胜感激,在此先致谢。

最佳答案

您可以使用监视器 https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-monit在您的服务器中定期监控您的进程,如果您的项目崩溃,它会再次重新启动它甚至可以通知您。但是在这种情况下,您必须在服务器中进行一些配置,因为 monit 会定期监视端口,如果它没有从 thta 端口收到任何回复,则会重新启动它。

否则你可以使用 forever 模块。易于安装和使用- https://www.npmjs.com/package/forever 它会监控并在 1 秒内重新启动您的应用程序

关于node.js - NodeJS API 服务失败如何重启?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47862562/

相关文章:

node.js - 原子 + Windows 上的 Mocha = 生成 Mocha ENOENT

PostgreSQL 数据库中的 Linux 系统利用率导入

javascript - 如何从 javascript 中的字符串中删除包含内容的 HTML 标记(不是特定标记)

c - 如何识别 linux 系统调用 unshare(CLONE_NEWNET) 中的性能瓶颈

c - 指针变量周围是否需要互斥锁?

python - 点聚类算法

java - 修改 HazelcastHttpSession 实例的属性时是否需要锁定它?

sql - SQL Server 中的哈希集等效项

javascript - Puppeteer 框架请求

javascript - 如何忽略 React Native 中的导入失败?