【问题标题】:procrun in --StartMode=Jvm running main that throws exception does not terminateprocrun in --StartMode=Jvm running main 抛出异常不会终止
【发布时间】:2016-03-30 08:01:17
【问题描述】:

尝试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),而不是尖叫、大喊和退出。

【问题讨论】:

    标签: java windows-services procrun


    【解决方案1】:

    在我将catch(Throwable) 包裹在主体周围之后,记录弹出的任何内容,然后在不重新抛出的情况下退出,我看到了问题。我有一个java.lang.NoClassDefFoundError

    底线:procrun 似乎会吞下错误类型的异常,即使在被调用的 Java 程序中抛出异常也不会终止。

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

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多