Exit main process after too many exceptions
This commit is contained in:
1 parent
2f276c7ce2
commit
521907fa7d
2 files changed
+30
-6
No files matched your search
+29
-3
@@ -24,6 +24,8 @@ const config = require("./config");
|
|||||||
|
|
||||||
const VERSION = require("../package.json").version;
|
const VERSION = require("../package.json").version;
|
||||||
|
|
||||||
|
let respawnTimestamp = 0;
|
||||||
|
let tooManyCrashesTimestamp = 0;
|
||||||
|
|
||||||
function getDependencyVersions() {
|
function getDependencyVersions() {
|
||||||
let dependencies = [`node@${process.versions.node}`];
|
let dependencies = [`node@${process.versions.node}`];
|
||||||
@@ -67,7 +69,32 @@ function restartWorker(worker, code, signal) {
|
|||||||
msg.signal = signal;
|
msg.signal = signal;
|
||||||
|
|
||||||
logger.error(msg);
|
logger.error(msg);
|
||||||
cluster.fork();
|
|
||||||
|
const now = Date.now();
|
||||||
|
respawnTimestamp = Math.max(now, respawnTimestamp + 2000);
|
||||||
|
if (respawnTimestamp === now) {
|
||||||
|
tooManyCrashesTimestamp = now;
|
||||||
|
cluster.fork();
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (now - tooManyCrashesTimestamp > 60000) {
|
||||||
|
process.exitCode = 1;
|
||||||
|
cluster.removeListener("exit", restartWorker);
|
||||||
|
for (let pid in cluster.workers)
|
||||||
|
cluster.workers[pid].kill();
|
||||||
|
|
||||||
|
logger.error({
|
||||||
|
message: "Too many crashes, exiting",
|
||||||
|
pid: process.pid
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
if (process.exitCode) return;
|
||||||
|
cluster.fork();
|
||||||
|
}, respawnTimestamp - now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -140,11 +167,10 @@ process.on("uncaughtException", function(err) {
|
|||||||
exception: err,
|
exception: err,
|
||||||
pid: process.pid
|
pid: process.pid
|
||||||
});
|
});
|
||||||
|
process.exitCode = 1;
|
||||||
cluster.removeListener("exit", restartWorker);
|
cluster.removeListener("exit", restartWorker);
|
||||||
for (let pid in cluster.workers)
|
for (let pid in cluster.workers)
|
||||||
cluster.workers[pid].kill();
|
cluster.workers[pid].kill();
|
||||||
|
|
||||||
logger.close();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -70,13 +70,11 @@ exit = () ->
|
|||||||
)
|
)
|
||||||
, 30000).unref()
|
, 30000).unref()
|
||||||
|
|
||||||
cluster.worker?.disconnect()
|
|
||||||
|
|
||||||
closeServer(20000, () ->
|
closeServer(20000, () ->
|
||||||
db.disconnect()
|
db.disconnect()
|
||||||
cache.disconnect()
|
cache.disconnect()
|
||||||
extensions.killAll()
|
extensions.killAll()
|
||||||
logger.close()
|
cluster.worker?.disconnect()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user