gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:58 25 4
gpt4 key购买 nike

我有类似的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com