尝试使用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),而不是尖叫、叫喊和退出。
发布于 2016-03-30 16:48:54
在我围绕main包装了一个catch(Throwable)之后,记录了所有弹出的东西,然后退出而不重新抛出,我看到了问题所在。我有一台java.lang.NoClassDefFoundError。
底线:procrun似乎接受了错误类型的异常,如果在被调用的Java程序中抛出一个异常,它甚至不会终止。
https://stackoverflow.com/questions/36302941
复制相似问题