1

我创建了一个只有一个 servletContext 侦听器的 webapp。

下面是代码:我试过了,Runtime.getRuntime()但这没有用。因此,虽然谷歌搜索遇到了,ProcessBuilder但它也不起作用。

我可以通过从 UNIX 框上的控制台运行来执行脚本。

下面代码的目的是执行 sh 脚本,例如echo Hello > test.txt在服务器出现故障时捕获某些内容。但是当服务器宕机时,这个脚本不会被执行。不知道为什么conextDestroyed没有被调用,或者如果conextDestroyed被调用,为什么脚本没有被执行。

public class MyTestContextListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

@Override
public void contextInitialized(ServletContextEvent arg0) {
    // TODO Auto-generated method stub

    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatStartContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
}
4

2 回答 2

1

你有没有把ServletContextListenerweb.xml

看看这个例子:http ://www.javabeat.net/2009/02/servletcontextlistener-example/

于 2013-05-20T19:33:34.560 回答
0

服务器宕机的原因有很多:

  • 内部错误(如 OutOfMemory) - 在这种情况下,未调用 ServletContextListener
  • 有人杀死了应用程序服务器 - 从未调用过 ServletContextListener
  • 您显式停止上下文(例如在管理器中) - 调用 ServletContextListener
  • 您显式停止整个应用程序服务器 - 调用 ServletContextListener

hth

于 2013-05-20T19:26:35.730 回答