user1108687
user1108687

Reputation: 209

Java shutdown hook not running

I have a product service in Java. In our code I am creating shut down hook, but when I stop service it is not calling shut down hook consistently. Out of 5 stop calls it has called shutdown hook only once.

Runnable shutdownHandler = new Runnable() {

    @Override
    public void run() {

        s_log.info("Shutting down thread..");
    }

};

Runtime.getRuntime().addShutdownHook(
        new Thread(shutdownHandler, "shutdownthread"));

Can anybody please tell me what could be the reason behind this not getting called consistently?

Upvotes: 1

Views: 2035

Answers (2)

nikolaosinlight
nikolaosinlight

Reputation: 193

I am also finding that my framework (Jooby) and Java shutdown hooks work fine on my Mac on IntelliJ which sends a kill SIGINT (-2) however on Ubuntu Server 20.04 LTS they don't run.

As my Java app is a webapp I came up with a simple workaround:

  1. Setup a controller to listen to some url that isn't easily guessable e.g.

    /exit/fuuzfhuaBFDUWYEGLI823y82941u9y47t3u45
    
  2. Have the controller simply do the following:

    System.exit(0)
    

Do a curl or wget from a script to the URL and the shutdown hooks all fire as JVM comes down.

I suspect for some reason on Linux there is a bug and no matter what interrupt that I use besides SIGKILL they all effectively behave like SIGKILL and the JVM comes down hard/abruptly.

Upvotes: 0

Arvind Kumar Avinash
Arvind Kumar Avinash

Reputation: 79005

Check the following code:

Runnable shutdownHandler = new Runnable() {
    @Override
    public void run() {
        System.out.println("Shutting down thread..");
    }
};

Runtime.getRuntime().addShutdownHook(
        new Thread(shutdownHandler, "shutdownthread"));

and if it gives you expected output, you need to check the documentation of your logging framework.

Upvotes: 1

Related Questions