From 77aa46588f2e1d4acdb5e30e44392c659b811d18 Mon Sep 17 00:00:00 2001 From: Gergo Moricz Date: Tue, 9 Jul 2024 14:29:32 +0200 Subject: [PATCH] feat: graceful exit handler --- apps/api/src/index.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index ff1ee6d3..747f8a7b 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -26,10 +26,27 @@ if (cluster.isMaster) { } cluster.on("exit", (worker, code, signal) => { - console.log(`Worker ${worker.process.pid} exited`); - console.log("Starting a new worker"); - cluster.fork(); + if (code !== null) { + console.log(`Worker ${worker.process.pid} exited`); + console.log("Starting a new worker"); + cluster.fork(); + } }); + + const onExit = () => { + console.log("Shutting down gracefully..."); + + if (cluster.workers) { + for (const worker of Object.keys(cluster.workers || {})) { + cluster.workers[worker].process.kill(); + } + } + + process.exit(); + }; + + process.on("SIGINT", onExit); + process.on("SIGTERM", onExit); } else { const app = express();