procrun in-StartMode =运行main的Jvm抛出异常不会终止

时间:2016-03-30 08:01:18

标签: java windows-services procrun

尝试Apache procrun我看到一种我不理解的行为。它归结为抛出异常的Java程序的main方法。这不会记录在任何地方,Windows服务不会停止。为了进一步调查,我将main方法更改为

public static void main(String[] args) throws Exception {
  if (args.length<10000000) {
    throw new Exception("one exception right away");
  }
  ...
}

当我使用prunsrv.exe将其作为服务安装然后启动它时,它会毫无问题地启动并且不会产生任何日志输出。特别是服务不会停止。

供参考,以下是使用procrun安装服务的方法:

& $procrun "//$operation//$service" `
  --DisplayName="$service" `
  --Description="$service" `
  --DependsOn="$depends" `
  --Startup=auto `
  --Install="$procrun" `
  --Jvm="$JVM" `
  --Classpath="$cp" `
  --Environment="PATH=$env:JAVA_HOME\bin" `
  --JavaHome="$env:JAVA_HOME" `
  --StartPath="c:\Search" `
  --JvmOptions="-Xmx512M;-Xms512M;-Djava.awt.headless=true" `
  --StartMode="jvm" `
  --StartClass="$classname" `
  --LogPath="c:\Search\std-logs" `
  --LogPrefix="procrun-$service" `
  --LogLevel="Debug" `
  --StdError="c:\Search\std-logs\stderr-$no0" `
  --StdOutput="c:\Search\std-logs\stdout-$no0" `
  --StartParams="(unused)"

我原本预计服务会立即停止,我会在stderr / stdout文件中找到一些日志输出,但没有。谁能解释一下呢?

编辑:哦,我的,似乎procrun吞下java.lang.Error(在我的情况下是java.lang.noClassDefFoundError),而不是尖叫,大喊大叫和退出。

1 个答案:

答案 0 :(得分:0)

我在主要部分周围包裹catch(Throwable)后,记录弹出的内容然后退出而不重新投掷,我看到了问题。我得到了java.lang.NoClassDefFoundError

底线:procrun似乎吞下了错误类型异常,如果在被调用的Java程序中抛出一个异常,它甚至都不会终止。

创建了一个问题:https://issues.apache.org/jira/browse/DAEMON-344