gpt4 book ai didi

Linux Tomcat 错误

转载 作者:IT王子 更新时间:2023-10-29 00:24:11 26 4
gpt4 key购买 nike

我在我的 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 header :^?ELF^A^A^A^B^C^A

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

前 4 个字节是一个魔数(Magic Number),将文件标识为 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

So, most probably, you are using a 32-bit version of Java (as bundled with your Tomcat), on a machine, which is not capable (or configured) to run 32-bit executables. And a shell issue (as described below), then masks the underlying problem, which is why you get this weird looking error message.

如果没有关于您的系统的更多详细信息,很难说更多,所以 uname -acat/etc/lsb-release 的输出会很好。


...

我敢打赌,这可能是一个 shell 问题,即你的 /bin/sh 指向类似 dash 的东西,这可能会导致与 的一些兼容性问题catalina.sh 脚本,并使其在某些情况下将 bin/java 解释为脚本,而不是将其作为可执行文件运行。

特别是 dash 的旧版本已知在 ENOEXEC 的情况下将二进制数据作为 shell 脚本执行(即损坏和/或无效的体系结构二进制文件)(参见 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 中的shebang 行。 sh 如下:

#!/bin/bash

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

如果 bash无法执行二进制文件而失败,请检查您的 java 二进制文件是否未损坏并且可以在您的系统上执行,通过手动运行它:

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

关于Linux Tomcat 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42042119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com