node-shutdown
v1.0.9
Published
Safely shutdown NodeJS
Downloads
3
Maintainers
Readme
Description
A library to safely shutdown your NodeJS app
Usage
var shutdown = require("node-shutdown");
shutdown.configure({
port: "MyApp.sock",
pid_file: "MyApp.pid"
grace_period: 10 // In seconds. default is 120 (2 minutes)
});
shutdown.on("shutdown", MyShutdownFunc); // NOTE: This is not an event emitter kind. calling this multiple times will cause the previous value to be overwritten. In short, there can only be one, and it supports promise
function MyShutdownFunc(params) {
http.close(); // stop accepting HTTP requests
// or you're using express
app.use(function(req, res, next) {
if (shutdown.shutting_down) {
res.send(503); // tell load balancer to forward the request to another node
}
else {
next();
}
});
// stop accepting more incoming requests
var timer_id = setInterval(function() {
if (shutdown.shutting_down) {
if (tasks.length == 0) {
clearInterval(timer_id); // stop processing more background task or wait for all to finish
}
else {
if (shutdown.time_remaining < 10) { // if you need more time
shutdown.shutdown(10); // extend the timer for 10 more seconds
}
}
}
}, 1000);
}
In other modules
var shutdown = require("node-shutdown"); // it's a singleton!
if (shutdown.shutting_down) {
// do something great!
}
Shutdown through socket -- in your terminal
// shutdown in 120 seconds (default)
$ echo shutdown | nc -U MyApp.sock
// shutdown in 10 seconds
$ echo shutdown 10 | nc -U MyApp.sock
// the shutdown command can be called repeatedly and it will reset the timer to the new one mentioned
Use case
Safely shutdown your app by stop accepting incoming requests.
Precaution
It is recommended to not close database connections so that pending tasks should be able to complete accordingly
Bonus feature
shutdown.on("maintenance", maintananceFunc); // set your app to maintenance mode!
shutdown.on("yet_another_function", makeSomethingGreatHappen); // set your app to maintenance mode!
in your terminal
$ echo maintenance | nc -U MyApp.sock
$ echo yet_another_function | nc -U MyApp.sock