2012-07-24 199 views
3

编辑阿帕奇procrun无法启动服务

我正在使用loaderDeamon接口的安装和运行Java应用程序作为Windows服务。为此,Apache的procrun服务工具(与tomcat一起安装的工具)处理服务的安装和执行。

最近,当通过服务管理器执行服务时,服务宣称正在运行,但没有响应。没有写入日志,并且应用程序的客户端无法通信。这让我觉得这个服务并没有真正运行。

我试图通过procrun/TS命令启动服务,如以下文档所述:http://commons.apache.org/daemon/procrun.html,挂起并且即使等待24小时仍未启动服务。 procrun本身生成我们捕获的日志。完整的日志包含在下面。我有几个关于日志的问题,我希望能够澄清为什么服务无法启动。

  1. 首先,'Java Worker线程完成...开始于 status = 6'表示线程终止?
  2. 其次,当我们到达线路时哪些线程仍在执行 '等待所有线程退出'?
  3. 第三,在启动服务时,日志中有没有其他内容可能在 处出现问题?

该服务在过去已成功执行,最近升级到java版本1.7.5后失败。我回到了Java 1.7.3的效果,所以我相信jvm的变化是无关紧要的,尽管值得一提。

[2012-07-24 07:16:04] [debug] (prunsrv.c:1644) Commons Daemon procrun log initialized 
[2012-07-24 07:16:04] [info] (prunsrv.c:1648) Commons Daemon procrun (1.0.10.0 32-bit) started 
[2012-07-24 07:16:04] [debug] (prunsrv.c:559) Installing service... 
[2012-07-24 07:16:04] [info] (prunsrv.c:595) Service CProgramFilesx86XpressfeedLoaderV5serviceLoaderEngine name XF Engine - C:\Program Files (x86)\Xpressfeed Loader V5 service\Loader 
[2012-07-24 07:16:04] [debug] (prunsrv.c:611) Setting service description The Xpressfeed V5 loader engine, used in headless mode to run load jobs in the background. 
[2012-07-24 07:16:04] [info] (prunsrv.c:629) Service 'CProgramFilesx86XpressfeedLoaderV5serviceLoaderEngine' installed 
[2012-07-24 07:16:04] [info] (prunsrv.c:1729) Commons Daemon procrun finished 
[2012-07-24 07:16:13] [debug] (prunsrv.c:1644) Commons Daemon procrun log initialized 
[2012-07-24 07:16:13] [info] (prunsrv.c:1648) Commons Daemon procrun (1.0.10.0 32-bit) started 
[2012-07-24 07:16:13] [info] (prunsrv.c:1545) Debugging 'CProgramFilesx86XpressfeedLoaderV5serviceLoaderEngine' service... 
[2012-07-24 07:16:13] [debug] (prunsrv.c:1345) Inside ServiceMain... 
[2012-07-24 07:16:13] [info] (prunsrv.c:1089) Starting service... 
[2012-07-24 07:16:13] [debug] (javajni.c:206) loading jvm 'C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll' 
[2012-07-24 07:16:13] [debug] (javajni.c:660) Jvm Option[0] -Djava.net.preferIPv4Stack=true 
[2012-07-24 07:16:13] [debug] (javajni.c:660) Jvm Option[1] -Djava.class.path=.;conf;dist\XpressfeedLoader.jar;lib\antlr-2.7.6.jar;lib\apache-log4j-extras-1.1.jar;lib\asm.jar;lib\auth\IA64\sqljdbc_auth.dll;lib\auth\x64\sqljdbc_auth.dll;lib\auth\x86\sqljdbc_auth.dll;lib\c3p0-0.9.1.2.jar;lib\cglib-2.2.jar;lib\commons-codec-1.4.jar;lib\commons-collections-3.1.jar;lib\commons-daemon-1.0.3.jar;lib\commons-dbcp-1.4.jar;lib\commons-lang-2.5.jar;lib\commons-logging-1.0.4.jar;lib\commons-pool-1.5.5.jar;lib\derby-10.6.2.1.jar;lib\dom4j-1.6.1.jar;lib\edtftpj-pro.jar;lib\freemarker.jar;lib\gui\jcommon-1.0.16.jar;lib\gui\jfreechart-1.0.13.jar;lib\hibernate-c3p0-3.5.2-Final.jar;lib\hibernate-tools.jar;lib\hibernate3.jar;lib\hsqldb.jar;lib\IAClasses.zip;lib\jargs.jar;lib\javassist.jar;lib\jaxen-1.1.1.jar;lib\jta.jar;lib\jtidy-r8-20060801.jar;lib\jung\collections-generic-4.01.jar;lib\jung\colt-1.2.0.jar;lib\jung\concurrent-1.3.4.jar;lib\jung\j3d-core-1.3.1.jar;lib\jung\jung-3d-2.0.1.jar;lib\jung\jung-algorithms-2.0.1.jar;lib\jung\jung-api-2.0.1.jar;lib\jung\jung-graph-i 
[2012-07-24 07:16:13] [debug] (javajni.c:660) Jvm Option[2] -Xms256m 
[2012-07-24 07:16:13] [debug] (javajni.c:660) Jvm Option[3] -Xmx1024m 
[2012-07-24 07:16:13] [debug] (javajni.c:880) DLL search path set to 'C:\PROGRA~2\XPRESS~2\jre\bin' 
[2012-07-24 07:16:13] [debug] (javajni.c:897) Java Worker thread started com/capitaliq/loader/loaderservice/LoaderService:start 
[2012-07-24 07:16:13] [debug] (javajni.c:914) Java Worker thread finished com/capitaliq/loader/loaderservice/LoaderService:start with status=6 
[2012-07-24 07:16:14] [debug] (prunsrv.c:1148) Java started com/capitaliq/loader/loaderservice/LoaderService 
[2012-07-24 07:16:14] [info] (prunsrv.c:1244) Service started in 1160 ms. 
[2012-07-24 07:16:14] [debug] (prunsrv.c:1496) Waiting for worker to finish... 
[2012-07-24 07:16:14] [debug] (prunsrv.c:1501) Worker finished. 
[2012-07-24 07:16:14] [debug] (prunsrv.c:1524) Waiting for all threads to exit 

步骤我已经采取了有没有效果:

  1. 在控制台与调试
  2. 指定的Java SE版本1.7.5运行服务,1.7.3
  3. 只是用默认jvm 1.6.30,不指定它
  4. 广泛的谷歌工作

任何帮助或想法赞赏!谢谢!

回答

3

经过大量使用注释掉东西并运行的老练调试策略之后,我最终将问题缩小到最近升级我们的瓶子。我们正在运行Apache的log4j的有以下版本:

  • Apache的log4j的,额外-1.0.jar
  • 的log4j-1.2.16.jar
  • SLF4J-API-1.5.8.jar
  • SLF4J-log4j12-1.5.8。JAR

我们升级到了下面,这引起了问题:

  • Apache的log4j的,额外-1.1.jar
  • 的log4j-1.2.17.jar
  • SLF4J-API - 1.6.6.jar
  • SLF4J-log4j12-1.6.6.jar

恢复到原来的jar文件后,该服务是无需挂起即可初始化和运行。

不幸的是,有没有堆栈或procrun日志产生的有用错误(除了我发布的问题),所以我无法确定为什么log4j会与初始化服务发生冲突。如果有其他人碰巧知道,我全都是耳朵 - 我们很可能会坚持使用较旧版本的罐子,直到理解无意的互动。

5

最近,我不得不尝试让procrun来运行我的服务。我试图了解将--StdOutput--StdError重定向参数设置为auto的问题后,我发现了几个小时。 stderr日志在--LogPath中生成,并包含堆栈跟踪和其他启动问题,这些问题在标准日志文件中无法看到。