我在linux服务器上启动tomcat时遇到问题。我运行startup.sh,并获得Tomcat Started日志,但无法访问localhost:8080上的任何内容。
$CATALINA_HOME/bin/startup.sh
Using CATALINA_BASE: /home/tomcat/apache-tomcat-8.5.11
Using CATALINA_HOME: /home/tomcat/apache-tomcat-8.5.11
Using CATALINA_TMPDIR: /home/tomcat/apache-tomcat-8.5.11/temp
Using JRE_HOME: /home/tomcat/jdk1.8.0_121
Using CLASSPATH: /home/tomcat/apache-tomcat-8.5.11/bin/bootstrap.jar:/home /tomcat/apache-tomcat-8.5.11/bin/tomcat-juli.jar
Tomcat started.
检查logs/catalina.out文件,其中有以下几行,但我找不到任何关于这些错误的信息。
/home/tomcat/jdk1.8.0_121/bin/java: 1: /home/tomcat/jdk1.8.0_121/bin/java: ^?ELF^A^A^A^B^C^A: not found
/home/tomcat/jdk1.8.0_121/bin/java: 2: /home/tomcat/jdk1.8.0_121/bin/java: Syntax error: "(" unexpected
有什么想法吗?
更新
我已经解码了您的错误消息中的ELF标头:^?ELF^A^A^A^B^C^A
它是一组插入符号编码的控制字符,可以如下解码:
前4个字节是幻数,将文件标识为ELF可执行文件。
0x7f (^?) - ELFMAG0
0x45 (E) - ELFMAG1
0x4c (L) - ELFMAG2
0x46 (F) - ELFMAG3
接下来的3个字节指定体系结构、端序和ELF格式版本:
0x01 (^A) - ELFCLASS32 (i.e. this is a 32 bit binary)
0x01 (^A) - ELFDATA2LSB (Little Endian)
0x01 (^A) - EI_VERSION (Version of ELF format EV_CURRENT/1)
因此,基本上它是一个32位Java二进制文件。
然后,我下载了32位版本的JRE(jre1.8.0_121),并尝试使用dash运行java,以确认我的shell问题理论(如下),它确实会产生与您所看到的完全相同的错误消息:
%dash ./java|&less
./java: 1: ./java: ^?ELF^A^A^A^B^C^A: not found
./java: 2: ./java: Syntax error: "(" unexpected
因此,很可能您在一台无法(或配置)运行32位可执行文件的机器上使用32位版本的Java(与Tomcat捆绑在一起)。一个shell问题(如下所述),然后掩盖了潜在的问题,这就是为什么你会收到这个看起来很奇怪的错误消息。
如果没有系统的更多细节,很难说得更多,所以CCD_ 2和CCD_。
。。。
我敢打赌,这可能是一个shell问题,即您的/bin/sh
指向类似于dash的东西,这可能会导致与catalina.sh脚本的一些兼容性问题,并使其在某些情况下将bin/java
解释为脚本,而不是将其作为可执行文件运行。
特别是dash的旧版本已知在ENOEXEC(即损坏和/或无效的体系结构二进制文件)的情况下将二进制数据作为外壳脚本执行(请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=816313;msg=5)。
和你的错误信息
/home/tomcat/jdk1.8.0_121/bin/java: 2: /home/tomcat/jdk1.8.0_121/bin/java: Syntax error: "(" unexpected
看起来很像。
你可以检查你的/bin/sh
指向什么,比如:
>ls -l /bin/sh
/bin/sh -> bash
如果不是bash,则按如下方式修改/home/tomcat/apache-tomcat-8.5.11/bin/catalina.sh中的shebang行:
#!/bin/bash
看看它是否有帮助,或者至少产生一个更可读的错误消息。
如果bash使用cannot execute binary file
失败,请检查您的java
二进制文件是否已损坏,并且可以在您的系统上执行,方法是手动运行:
/home/tomcat/jdk1.8.0_121/bin/java