试用Apache procrun我看到了我不理解的行为。它归结为main
Java程序抛出异常的方法。这不会在任何地方记录,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
),而不是尖叫、大喊和退出。