2017-02-04 464 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