1.0.9 • Published 7 years ago

node-shutdown v1.0.9

Weekly downloads
2
License
Apache 2.0
Repository
github
Last release
7 years ago

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
1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago