2017-02-04 61 views
15

Mam problem z uruchomieniem programu tomcat na moim serwerze Linux. Uruchamiam startup.sh i otrzymuję rejestrowanie Tomcat Started, ale potem nie mam dostępu do niczego na localhost: 8080.Błędy Tomcat w systemie Linux

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

Sprawdzanie pliku logs/catalina.out, istnieją następujące linie tam, ale nie byłem w stanie znaleźć żadnych informacji na temat tych błędów.

/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 

Jakieś pomysły?

+3

można zrobić plik '/ home/tomcat/jdk1.8.0_121/bin/java'. Wygląda na to, że pliki binarne Java nie są odpowiednie dla twojej platformy lub są uszkodzone. – geert3

+1

@ geert3, Zgadzam się. W moim systemie Intel nagłówek plików ELF nie jest (raz wydany przez ASCII) '^? ELF^A^A^A^B^C' - nie sprawdził formatu ELF ze względu na jego znaczenie, ale podejrzewam, że" ponownie na inną platformę. Pytanie powinno być prawdopodobnie zaktualizowane o szczegóły dotyczące platformy. – LSerni

+3

Stack Overflow to strona z pytaniami dotyczącymi programowania i programowania. To pytanie wydaje się być nie na temat, ponieważ nie chodzi o programowanie czy rozwój. Zobacz [Jakie tematy mogę tu zadać] (http://stackoverflow.com/help/on-topic) w Centrum pomocy. Być może lepszym rozwiązaniem będzie [Super użytkownik] (http://superuser.com/) lub [Unix i Linux Stack Exchange] (http://unix.stackexchange.com/). Zobacz także [Gdzie mogę publikować pytania dotyczące Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Odpowiedz

8

Aktualizacja

Mam dekodowane nagłówek ELF z komunikatem o błędzie: ^?ELF^A^A^A^B^C^A

Jest to grono caret encoded znaków sterujących, które mogą być dekodowane w następujący sposób:

Pierwszy 4 bajty są magiczną liczbą, identyfikującą plik jako plik wykonywalny ELF.

0x7f (^?) - ELFMAG0 
0x45 (E) - ELFMAG1 
0x4c (L) - ELFMAG2 
0x46 (F) - ELFMAG3 

Następne 3 bajty określają architektury, endianness i wersję formatu 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) 

Więc w zasadzie jest to 32-bitowy binarny Java.

Następnie Pobrałem wersję 32-bitową wersję JRE (jre1.8.0_121) i próbował uruchomić java z kreską, aby potwierdzić moją teorię emisyjną shell (poniżej), i rzeczywiście to robi produkować dokładnie ten sam komunikat o błędzie masz:

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

Więc najprawdopodobniej używasz 32-bitowej wersji Javy (jak dostarczany wraz z Tomcat), na komputerze, który nie jest w stanie (lub skonfigurowane) do uruchamiania 32-bitowych plików wykonywalnych. I problem powłoki (jak opisano poniżej), a następnie maskuje podstawowy problem, dlatego pojawia się ten dziwny komunikat o błędzie.

Trudno powiedzieć więcej bez konieczności nieco więcej szczegółów na temat systemu, więc wyjście uname -a i cat /etc/lsb-release byłoby miło mieć.


...

Mój zakład jest to, że może to być problem powłoki, czyli swoich /bin/sh punkty na coś kreską, co może powodować pewne problemy ze zgodnością z catalina.sh skrypcie i sprawiają, że interpretuje on bin/java jako skrypt, zamiast uruchamiać go jako plik wykonywalny, w pewnych okolicznościach.

W szczególności starszych wersjach kreską są znane wykonuje dane binarne jako skrypt powłoki w przypadku ENOEXEC (tj uszkodzona i/lub nieprawidłowy architektura binarny) (patrz: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=816313;msg=5).

A twój komunikat o błędzie

/home/tomcat/jdk1.8.0_121/bin/java: 2: /home/tomcat/jdk1.8.0_121/bin/java: Syntax error: "(" unexpected 

wygląda bardzo podobnie do niego.

Można sprawdzić, co się /bin/sh punkty, tak jak:

>ls -l /bin/sh 
/bin/sh -> bash 

Jeśli nie jest bash, a następnie zmodyfikować shebang linię w /home/tomcat/apache-tomcat- 8.5.11/bin/catalina.sh następująco:

#!/bin/bash 

i sprawdzić, czy to pomaga, a przynajmniej daje bardziej czytelny komunikat o błędzie.

W przypadku bash nie z cannot execute binary file sprawdź, czy java binarne nie są uszkodzone i mogą być wykonywane w systemie, uruchamiając go ręcznie:

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