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
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
@ 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
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