1
我有類似的代碼的NodeJS:如果NodeJS API服務失敗,如何重新啓動?
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實時並捕獲一定量的負載;做這件事我不高興嗎?
任何幫助將不勝感激,提前致謝。