From 3e5c36f8d843331ff6bffd3f143f4c8a05e2be9c Mon Sep 17 00:00:00 2001 From: Ludwig Lehnert Date: Mon, 12 Jan 2026 18:24:14 +0100 Subject: [PATCH] fixed expressjs shutdown taking a long time --- docker-compose.yml | 1 + expressjs/src/server.js | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 145ca0a..309f7cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -60,6 +60,7 @@ services: context: ./expressjs container_name: expressjs + stop_grace_period: 5s environment: - BASE_PATH=/manage diff --git a/expressjs/src/server.js b/expressjs/src/server.js index 4151885..82179ce 100644 --- a/expressjs/src/server.js +++ b/expressjs/src/server.js @@ -334,7 +334,7 @@ async function cleanupExpired() { } } -setInterval(() => { +const cleanupTimer = setInterval(() => { cleanupExpired().catch(() => undefined); }, 60 * 1000); cleanupExpired().catch(() => undefined); @@ -804,6 +804,23 @@ app.use((req, res) => { res.status(404).send(renderPage('Nicht gefunden', '

Seite nicht gefunden.

')); }); -app.listen(port, () => { +const server = app.listen(port, () => { console.log(`Express server listening on ${port} with base path ${basePath}`); }); + +function shutdown(signal) { + clearInterval(cleanupTimer); + server.close(() => { + db.close(() => { + console.log(`Shutdown complete (${signal}).`); + process.exit(0); + }); + }); + setTimeout(() => { + console.error('Forced shutdown after timeout.'); + process.exit(1); + }, 5000).unref(); +} + +process.on('SIGTERM', () => shutdown('SIGTERM')); +process.on('SIGINT', () => shutdown('SIGINT'));