【问题标题】:how to exec a shell script from java which does tomcat restart and still continue to run如何从java执行一个shell脚本,它会重新启动tomcat并继续运行
【发布时间】:2014-01-28 10:36:35
【问题描述】:

我有在 tomcat 上运行的 java 应用程序。我有 shell 脚本,它会重新启动 tomcat,然后执行其他 unix 命令。所以当我运行这个shell脚本时,从我的应用程序(java代码)中,一旦tomcat重新启动,它就会退出shell脚本并且在tomcat重启后不运行unix命令。

我知道当我们从java运行shell脚本时,它是由tomcat作为父进程运行的,当tomcat重启时它会杀死父进程,所以tomcat重启后的命令不会执行。

有没有办法在tomcat重新启动后运行shell脚本...我尝试使用不同的选项,例如nohup、/bin/sh -c,但它们都不起作用...一旦tomcat重新启动脚本死了。

【问题讨论】:

  • 您可能不得不从您正在重新启动的 tomcat 之外的其他东西上运行它。想一想,如果你命令你的电脑关机再打开记事本,你认为记事本会打开吗?

标签: java linux unix tomcat


【解决方案1】:

我认为自从 JVM 重新启动以来,没有办法让线程保持活动状态。但是,您可以将 load-on-startup 设置为 1(或其他一些非零值)的 servlet。 init() 函数将在 Tomcat 启动时执行。你可以在那里拥有其余的命令。当然,不管 Tomcat 怎么重启,它都会运行。

有关启动时加载的更多信息:http://tutorials.jenkov.com/java-servlets/web-xml.html#load-on-startup

【讨论】: