From 64adff08559c9579c05bc59bdca80df1d0732c34 Mon Sep 17 00:00:00 2001 From: zstadler Date: Wed, 1 Mar 2023 17:05:21 +0200 Subject: [PATCH] Handle SIGTERM (#782) * Handle SIGTERM Resolve #781 * Add `Caught signal ...` messages Container log when sending a `SIGHUP` signal and then a `SIGTERM` signal using `docker kill --signal ...` : ``` Starting tileserver-gl v4.4.8 [INFO] Automatically creating config file for zurich_switzerland.mbtiles [INFO] Only a basic preview style will be used. [INFO] See documentation to learn how to create config.json file. Run with --verbose to see the config file here. Starting server Listening at http://[::]:8080/ Startup complete Caught signal SIGHUP, refreshing Stopping server and reloading config Starting server Listening at http://[::]:8080/ Startup complete Caught signal SIGTERM, stopping gracefully ``` Note that the numeric signal values, as used in the shell version, were replaced by signal names, as used in nodeJS. * run 'npm run lint:js:fix' --------- Co-authored-by: acalcutt --- src/server.js | 18 ++++++++++++++---- src/utils.js | 4 +++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/server.js b/src/server.js index 0850e5f20..65e8b2c29 100644 --- a/src/server.js +++ b/src/server.js @@ -590,6 +590,16 @@ function start(opts) { }; } +/** + * Stop the server gracefully + * + * @param {string} signal Name of the received signal + */ +function stopGracefully(signal) { + console.log(`Caught signal ${signal}, stopping gracefully`); + process.exit(); +} + /** * * @param opts @@ -602,11 +612,11 @@ export function server(opts) { process.exit(1); }); - process.on('SIGINT', () => { - process.exit(); - }); + process.on('SIGINT', stopGracefully); + process.on('SIGTERM', stopGracefully); - process.on('SIGHUP', () => { + process.on('SIGHUP', (signal) => { + console.log(`Caught signal ${signal}, refreshing`); console.log('Stopping server and reloading config'); running.server.shutdown(() => { diff --git a/src/utils.js b/src/utils.js index bc275402f..c9bc46628 100644 --- a/src/utils.js +++ b/src/utils.js @@ -8,9 +8,11 @@ import glyphCompose from '@mapbox/glyph-pbf-composite'; /** * Generate new URL object + * + * @param req * @params {object} req - Express request * @returns {URL} object - **/ + */ const getUrlObject = (req) => { const urlObject = new URL(`${req.protocol}://${req.headers.host}/`); // support overriding hostname by sending X-Forwarded-Host http header