在linux中发出kill命令,优雅地停止嵌入式jetty服务器

问题描述 投票:0回答:3

在我的嵌入式Jetty服务器应用程序中,我想关闭一些流,执行器等,然后在linux中被kill -9命令杀死。我该如何处理?

我发现当我的jetty服务器运行并发出kill -9命令时,“Killed”字符串会在日志中打印并关闭应用程序。

我已经添加了LifeCycleListener添加为服务器的连接器,这样如果我的服务器停止,我可以在应用程序关闭之前进行一些清理。但是在kill -9的情况下不会调用它

    server = new Server();
    loadConnectors(server);

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
    context.setContextPath("/");

    server.setHandler(context);

    ServletHolder jerseyServlet = context.addServlet(ServletContainer.class, "/*");
    jerseyServlet.setInitOrder(0);

    // Tells the Jersey Servlet which REST service/class to load.
    jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", Resources.class.getCanonicalName());

    server.setStopAtShutdown(true); 
    server.start();
    logger.debug("Reached this line");



  private void loadConnectors(Server server) {
    //----Http connection setup------------------
    ServerConnector connector = new ServerConnector(server);
    connector.setPort(9025);
    connector.addLifeCycleListener(new ConnectorListener());
            .....
    }
java linux jetty
3个回答
0
投票

使用kill -9将始终导致JVM的严格终止。

Jetty无法解决这个问题。

请考虑在您的网络服务器上使用一个命令(显然是密码保护),该命令只会发出Server.stop()

或者使用JMX并调用Server的stop()方法。 (这可以通过JMX控制台/ JMX浏览器/甚至是JMX命令行完成)


0
投票

你只能用KILLSIG 15这样的Runtime.addShutdownHook()来听Runtime.getRuntime().addShutdownHook(new Thread());(kill -15)


0
投票

抱歉,这是不可能的。 SIGKILL(9)和SIGSTOP(Linux上19个,Solaris上23个)不容忽视或被抓住。

© www.soinside.com 2019 - 2024. All rights reserved.