Exit your process, gracefully (if possible) - for Node.js
npm i close-with-grace
const closeWithGrace = require('close-with-grace')
// delay is the number of milliseconds for the graceful close to
// finish.
closeWithGrace({ delay: 500 }, async function ({ signal, err, manual }) {
if (err) {
console.error(err)
}
await closeYourServer()
})
// default delay is 10000
// to disable delay feature at all, pass falsy value to delay option.
closeWithGrace({ delay: false }, () => await somethingUseful())
const closeWithGrace = require('close-with-grace')
// delay is the number of milliseconds for the graceful close to
// finish.
closeWithGrace(
{
delay: 500,
logger: { error: (m) => console.error(`[close-with-grace] ${m}`) }
},
async function ({ signal, err, manual }) {
if (err) {
console.error(err)
}
await closeYourServer()
})
// default logger is console
// to disable logging at all, pass falsy value to logger option.
closeWithGrace({ logger: false }, () => await somethingUseful())
import fastify from 'fastify'
import closeWithGrace from 'close-with-grace'
const app = fastify()
closeWithGrace(async function ({ signal, err, manual }) {
if (err) {
app.log.error({ err }, 'server closing with error')
} else {
app.log.info(`${signal} received, server closing`)
}
await app.close()
})
await app.listen()
closeWithGrace
adds a global listeners to the events:
process.once('SIGHUP')
process.once('SIGINT')
process.once('SIGQUIT')
process.once('SIGILL')
process.once('SIGTRAP')
process.once('SIGABRT')
process.once('SIGBUS')
process.once('SIGFPE')
process.once('SIGSEGV')
process.once('SIGUSR2')
process.once('SIGTERM')
process.once('uncaughtException')
process.once('unhandledRejection')
process.once('beforeExit')
In case one of them is emitted, it will call the given function. If it is emitted again, it will terminate the process abruptly.
-
delay
: the numbers of milliseconds before abruptly close the process. Default:10000
.- Pass
false
,null
orundefined
to disable this feature.
- Pass
-
logger
: instance of logger which will be used internally. Default:console
.- Pass
false
,null
orundefined
to disable this feature.
- Pass
Execute the given function to perform a graceful close.
The function can either return a Promise
or call the callback.
If this function does not error, the process will be closed with
exit code 0
.
If the function rejects with an Error
, or call the callback with an
Error
as first argument, the process will be closed with exit code
1
.
Calling closeWithGrace()
will return an object as formed:
close()
: close the process, themanual
argument will be set to true.uninstall()
: remove all global listeners.
MIT