2017-02-04 81 views
15

我在启动我的linux服务器上的tomcat时遇到问题。我运行startup.sh,并获取Tomcat Started日志记录,但无法访问localhost:8080上的任何内容。Linux Tomcat错误

$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. 

检查日志/ 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 

任何想法?

+3

你可以做'文件/ home/tomcat的/ jdk1.8.0_121 /斌/ java'。看起来你的Java二进制文件不适合你的平台,或者损坏。 – geert3

+1

@ geert3,我同意。在我的英特尔系统上,ELF文件的头文件不是(一次ASCII编辑的)''ELF^A^A^A^B^C' - 并没有检查ELF格式的意义,但我怀疑他们'重新换一个不同的平台。这个问题或许应该用平台的细节来更新。 – LSerni

+3

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

8

更新

我从你的错误消息的解码ELF头:^?ELF^A^A^A^B^C^A

它是一堆caret encoded控制字符, 可以解码如下:

第一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位爪哇二进制。

然后,我下载的JRE(jre1.8.0_121)的32位版本,并试图运行的Java破折号,以确认我的壳问题的理论(下图),它确实不产生相同的错误消息,您有:

%dash ./java|&less 
./java: 1: ./java: ^?ELF^A^A^A^B^C^A: not found 
./java: 2: ./java: Syntax error: "(" unexpected 

所以,最有可能,您使用的是Java(如捆绑你的Tomcat)的32位版本,一台机器,这是不能够在(或配置)运行32位可执行文件。然后shell问题(如下所述)然后掩盖了潜在的问题,这就是为什么你会看到这个奇怪的外观错误消息。

这是很难说的更多,而无需系统, 所以uname -acat /etc/lsb-release输出将是不错的有更多的细节。


...

我敢打赌,这可能是一个问题壳,即你的/bin/sh点像破折号,这可能会导致一些兼容性问题与catalina.sh脚本,并在某些情况下将bin/java解释为脚本,而不是将其作为可执行文件运行。

特别旧版本破折号的已知在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 

如果不是庆典,然后修改家当线在你的/ home/tomcat的/ Apache的tomcat- 8.5.11/bin中/ catalina.sh如下:

#!/bin/bash 

,看看是否有帮助,或至少产生更可读的错误消息。

如果庆典失败cannot execute binary file,请检查您java二进制文件没有损坏,并可以在你的系统上执行,通过手工运行它:

/home/tomcat/jdk1.8.0_121/bin/java