tomcat运行shell脚本并将进程返回给系统

时间:2015-03-30 13:32:01

标签: java linux shell tomcat glassfish

我有一些脚本,他们有自己的工作,必须继续无限循环运行。我设法在java servlet中启动shell脚本。 Servlet在Tomcat上运行。但是,当我杀死服务器(用于测试)时,所有正在运行的shell脚本都会死掉,不再有任何进程被渲染。

另外,因此,我必须将服务器更改为Glassfish。事实证明,即使我杀了Glassfish,这个过程也是由在Glassfish里面运行的应用程序开始的!这很令人困惑,因为我认为它们应该是相同的结果。并且tomcat在广泛使用和更快管理控制台方面是首选。

是否有人知道如何将已启动的进程返回到tomcat中的shell。我不知道问题出在哪里。 我启动脚本的代码是:

ProcessBuilder pb= new ProcessBuilder("/bin/bash", "scriptDir/" + "xx.sh");
pb.start ;

通常我可以立即从终端获得PID。一旦tomcat被杀死,其中的arll也会消失。

1 个答案:

答案 0 :(得分:0)

我做了以下测试:

案例1:

  1. 在tomcat上启动应用程序
  2. 开始所有的scirpts
  3. grep确保所有流程都已启动
  4. 再次杀死tomcat和grep
  5. 结果:所有流程死亡

    案例2:

    1. 在glassfish上启动应用程序
    2. 开始所有的scirpts
    3. grep以确保所有进程都开始
    4. 再次杀死glassfish和grep
    5. 结果:所有流程都保持活跃

      案例3:

      1. 在tomcat上启动应用程序
      2. 在glassfish(abother port)上启动应用程序
      3. 在tomcat上使用app启动所有脚本
      4. grep确定
      5. <强> 3-1

        1. 杀死tomcat
        2. grep again
        3. 结果:所有流程都保持活跃

          1. 然后杀死glassfish
          2. 结果:所有流程仍然存在

            3-2

            1. 杀死glassfish
            2. grep again
            3. 结果:所有流程都保持活跃

              1. 杀死tomcat
              2. 结果:所有流程死亡

                所以我认为在我的情况下,玻璃鱼是唯一的选择。可能是tomcat和glassfish在终止期间有不同的机制。 Tomcat似乎杀死了所有分层子进程,而glassfish忽略了它们。