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'));