[error]tomcat setting - tomcat.service: Failed with result 'exit-code'

kim_sang_ june·2024년 1월 13일

웹서버 구축

목록 보기
1/1
× tomcat.service - Tomcat 10 servlet container
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-01-09 08:51:32 UTC; 6s ago
    Process: 2658 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 2668 (code=exited, status=1/FAILURE)
        CPU: 17ms

Jan 09 08:51:32 ribbitt systemd[1]: Starting Tomcat 10 servlet container...
Jan 09 08:51:32 ribbitt startup.sh[2658]: Existing PID file found during start.
Jan 09 08:51:32 ribbitt startup.sh[2658]: Removing/clearing stale PID file.
Jan 09 08:51:32 ribbitt startup.sh[2658]: Tomcat started.
Jan 09 08:51:32 ribbitt systemd[1]: Started Tomcat 10 servlet container.
Jan 09 08:51:32 ribbitt systemd[1]: tomcat.service: Main process exited, code=exited, status=1/FAILURE
Jan 09 08:51:32 ribbitt systemd[1]: tomcat.service: Failed with result 'exit-code'.

tomcat 설정 과정에서 main PID(process)에서 error가 발생해 tomcat 실행에 문제가 발생

현재 되는것

  1. tomcat 실행 : ./start.sh

문제가 있는 부분

  1. main PID가 exit-code 발생 이유로 중단됨
  2. 다른 블로그에 옳은 예와 비교했을때 Java 과정에서 문제가 생긴 것으로 판단.
  3. /usr/local/ 파일에 java 가 없음
    4. java class 실행에도 문제가 있음
    (그냥 java test해야하는데 java test.class함...)
  4. 2번에 의해 tomcat-java연동 재 확인

궁금증

  1. wgetapt install의 차이점 ( 현재 openJDK는 apt get, Tomcat은 wget )
  2. 더 디테일한 JDK설정이 필요한가?

예상 해결책

  • java 경로 재확인->apt install로 햇지만 문제없다고 생각(.bashrc도 경로 수정함)
  • 2번에 의해 tomcat-java연동 재확인
  • tomcat file을 tomcat 사용자가 아닌 /usr/local로 이동
  • tomcat - JDK연동 확인
  • tomcat - Nginx 연동 확인
  • port관련 문제 ( tomcat 기본 port 가 8080 )
  • 권한 관련 문제? ( root권한인데 tomcat에 접근이 안됨 )

여러번 시도했지만 안됨

  • tomcat setting file 재설치
    ( file script의 문제일 경우 control process error이 발생함, main error가 아니라 )

  • ./start.sh -> jps로 프로세스는 실행되는지만 확인 ( 관련 stack overflow 문답 있음

  • error message들 다시 한번 확인 ( 관련 로그 살피기 )

  • nginx 충돌 한번 확인

  • 포트 잘 열려 있는지 (8080 닫혀있는걸로 보임) 포트들 끼리 충돌 나는 건 아닌가 확인

  • tomcat 재설치 ( ver.9로 다운 그레이드 후 다시 )

https://superuser.com/questions/1602999/ubuntu-systemctl-service-fails-with-main-process-exited-code-exited-status-1

https://velog.io/@jisun-rea/Amazon-Linux-2-Tomcat-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B3%84%EC%A0%95-%EB%B3%80%EA%B2%BD

해결과정

결국 에러메시지...
.../tomcat/latest/logs/catalina.out
파일에 tail -f 파일명명령어를 사용해 로그를 들여다 본 결과이다


Unrecognized option: -server -XX:+UseParallelGC
Error: Could not create the Java Virtual Machine.

라고 써있는데 -server -XX:+UseParallelGC옵션을 인식 할 수 없어 Java Virtual Machine을 생성 할 수 없다고 쓰여있다.

systemctl status tomcat명령어를 통해 위에서 계속 빨간불 들어와 있는 경우를 정상 작동과 내 경우를 비교해 봤을때, Main PID: 4016(java)부분에서 exit code가 동작한 걸로 보아 java와의 연결이 문제일 것이라고 예상하고 있었다.
그래서 더더욱 이 로그에 무게를 두고 문제를 해결하려 했다.

sudo vim /etc/systemd/system/tomcat.service명령어로 tomcat의 서비스를 설정 과정을 거친 적이 있었다.

[Unit]
Description=Tomcat 10 servlet container
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/default-java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/usr/local/tomcat/latest"
Environment="CATALINA_HOME=/usr/local/tomcat/latest"
Environment="CATALINA_PID=/usr/local/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/usr/local/tomcat/latest/bin/startup.sh
ExecStop=/usr/local/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

java관련 오류라서 $JAVA_HOME과 같은 PATH문제라고 생각했으나, ~/.bashrc 와 같은 JDK환경 변수를 전부 수정해도 오류는 해결되지 않았다.

이때 이전 로그에서 찾아냈듯이
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
이 줄이 수상해 #으로 주석 처리 하니...


문제가 다른 부분으로 바뀌어 있었다.
잘 보면 이전에 exit되었던 main PID는 잘 작동 했으나, shutdown.sh에서 비정상 종료 코드로 인해 실행이 종료 되었고, 권한관련 문제라고 쓰여있다.

이전까지 문제 없던 shutdown.sh에서 문제가? 심지어 이 파일은 문제 없이 잘 동작했다고 하는 startup.sh와 같은 file에 같은 권한으로 설정 되어있다.

이때 혹시 내가 아까 shutdown.sh와 startup.sh로 테스트 해봤던 과정때문에 문제가 생겼나 싶어 $jps명령어로 실행중인 process들을 확인해보니

이미 Bootstrap이 실행중이 었다.
(startup.sh를 실행하면 생기는 process로 실제 실행 process라고 알고있음)

그래서 직접 .../tomcat/latest/bin/shutdown.sh를 실행시켜 process를 종료하고, 다시 $systemctl start tomcat를 하니....

드디어 저 푸른점을 마주했다...

배운점

일주일정도 동안 이 문제를 싸매고 끙끙 거린 결과...

  1. 너무 따라만하지 말고, 내가 뭐하는지 이게 뭘 의미하는지 알아가면서 따라하기
  2. 정리해 가면서 앞으로 나아가기. 막상 나중에 가니 내가 무엇을 보고 이 프로그램을 설정했는지, 내가 어디까지 해결했고 어떤 다른 문제를 마주했는지 헷갈려지더라
  3. LOG를 잘 읽자... 컴퓨터는 왠만하면 우리에게 무엇이 문제인지 말해준다.
  4. log나 status등 현재 상태를 확인하는 명령어나 파일을 잘 쓰자. ( systmectl status,journalctl -xn, tomcat/logs/catalina.out , jps)
  5. 최대한 많은 예시를 확인후 세팅하자. 다 저질러 놓고 수습하기 보단 어느정도 알아는 보고 들어가자.
  6. 두 프로그램의 연결은 매우 민감하고 조심스럽게
  7. (직접적인 문제 원인은 아니었지만)port,방화벽, 권한, 환경변수 와 같은 운영체제의 기본적인 것들은 많이 알수록 좋고, 많이 자주 쓰이니 정리해두자

0개의 댓글