我在配置tomcat 7以在 Windows 上作为服务运行时遇到以下问题。
更具体地说,tomcat 是安装在我们客户服务器上的 Web 应用程序的一部分,它必须在其中包含所有依赖项。
在这种情况下,tomcat 依赖于 Java JDK/JRE,因此我下载了一个独立的 jdk(版本 1.7u21)及其 jre,并将其放在 tomcat 文件夹中。
所以现在我的目录树是这样的:
tomcat7
- bin
- conf
- jdk
- jre
- logs
- temp
- webapps
- work
然后我继续使用命令将其安装为服务
tomcat\bin\service.bat install
jvm
它在模式下安装没有问题。
请注意,我修改了 service.bat 文件,以便正确设置所有需要的变量,即 CATALINA_HOME、CATALINA_BASE、JAVA_HOME 和 JRE_HOME,最后两个指向内部 jdk/jre。
但是,如果我尝试启动该服务,我会收到一条错误消息,指出它无法启动该服务并引用错误代码 1。
查看tomcat日志,它说:
[2013-05-22 12:22:09] [info] [ 5392] Commons Daemon procrun (1.0.15.0 32-bit) started
[2013-05-22 12:22:10] [info] [ 5392] Running 'AGEws2Tomcat7' Service...
[2013-05-22 12:22:10] [info] [ 2764] Starting service...
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] Failed creating java C:\AGEws\tomcat7\jdk\jre\bin\server\jvm.dll
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] ServiceStart returned 1
[2013-05-22 12:22:11] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:11] [info] [ 5392] Run service finished.
[2013-05-22 12:22:11] [info] [ 5392] Commons Daemon procrun finished
我试着用谷歌搜索一下这个部分Failed creating java
,我发现了一些关于.dll
文件可能依赖的信息,我已经找到了,但我不知道我应该把它放在哪里,如果这确实是问题所在。
我还尝试在java
模式下安装该服务,它可以工作,但使用我计算机自己的 JVM 而不是内部 JVM,而我需要它来使用内部 JVM。
为了让 tomcatjvm
使用自己的 jdk/jre 在模式下作为服务正常工作,我可以/必须做什么?
请注意,我们的 Web 应用程序曾经随 tomcat 5 一起发布,它在jvm
模式下运行良好。
最后我发现解决方案是将启动和停止模式设置为
java
同时提供带有选项的显式 JAVA_HOME进行修改后,服务工作正常,即使是在
java
模式而不是jvm
旧服务过去的模式。为了澄清 Matteo 的回答(并帮助不太熟悉 Java 世界的 Windows 人员),我们在 64 位 Windows Server 2012(非 R2)上使用 Tomcat 8 时遇到了完全相同的问题。我们正在使用/配置 IBM Rational DOORS Help 9.6.1 - 尽管我们在尝试在相对现代的 64 位版本的 Windows 上进行配置时,已经在大多数 IBM Java/Tomcat 风格的产品中看到了这一点。
我们必须使用以下内容更新位于 Tomcat 安装目录中的 service.bat 文件:
启动/停止选项从“jvm”更改而来,而 JavaHome 选项是配置文件的新添加项。然后您通过以下方式执行服务的安装:
在我们的例子中,服务名称是 DOORS_Help。我们有一个 64 位 Tomcat 安装和一个 32 位 JRE 安装,它们显然可以一起工作——这是供应商提供的。
编辑:另一个选项似乎是在安装 Tomcat之前手动设置 JRE_HOME 和 JAVA_HOME 环境变量。否则您将需要重新安装 Windows 服务。我知道这与原始帖子相矛盾,但似乎并非所有 Tomcat 安装都是一样的!