Tomcat 재기동, 종료 안될 때 에러 해결

yeahdy_:)·2024년 3월 13일

error

목록 보기
3/5

개발 서버에 배포를 시도했는데, 왜인지 계속해서 배포에 실패하였고 재기동을 하면 아래와 같은 에러가 발생했다.

tomcat 종료하려고 $[tomcat경로]/bin/shutdown.sh 해도 마찬가지 ㅜㅜ..

PID file found but no matching process was found. Stop aborted.

PID file found but either no matching process was found or the current user does not have permission to stop the process. Stop aborted.

📌원인

프로세스(tomcat)가 정상적으로 종료되면 PID파일도 함께 삭제되어야 하는데, 그렇지 못하고 PID파일만 여전히 남아있어서 “PID는 찾았지만 프로세스를 찾지 못했다” 는 에러가 발행한 것이다.

따라서 PID 파일을 수동으로 삭제 해 줘야 한다.

📌삽질

  1. PID 찾아서 종료시키기
    구글링 하다가 ps -ef|grep tomcat 으로 PID 검색 해서 삭제하라고 하는데, 당연히 tomcat은 이미 죽어있어서 검색되지 않았다…
  • ps: 프로세스 상태의 약자로 실행중인 프로세스에 대한 정보를 나타냄
  • -ef: ‘-e’ 는 모든 프로세스 선택, ‘-f’는 자세한 리스트를 생성
  • grep: 지정된 단어를 포함하는 줄만 보이도록 필터링

참고: 프로세스가 시작되면 ID인 PID 파일을 생성하고, PID 파일로 프로세스 실행 중 여부를 알 수 있다.

  1. CMD 창에서 port 죽이기
    로컬환경에서 port가 동시에 실행되어 충돌날 경우 사용중인 port를 죽이는 방법이다.
    CMD창에서 netstat -a -o 명령어를 입력하면 현재 사용중인 포트가 검색되고, 현재 사용중인 포트의 PID를 찾아서 taskkill /f /{종료할 PID번호]} 명령어를 입력한다.
    일단 여기서 port를 검색할 이유가 전혀 없고, 검색하더라도 당연히 tomcat은 이미 죽었기 때문에 무용지물이다.
    여기서 -o 는 PID를 뜻하는데, PID를 삭제해야 한다고 생각해서 해 본 시도이다..

📌해결

사실 에러 메세지에서 종료된 프로세스의 PID를 계속해서 알려주고 있었고, 아래 명령어로 수동으로 PID 파일을 삭제해서 성공적으로 중지 후 배포할 수 있었다!
(permission 관련 에러가 나면 sudo 권한으로 시도하면 된다.)

kill -9 {pid번호}

재발을 대비 해 pid 파일을 찾아서 tomcat을 강제로 종료하고, 재시작하게 하는 스크립트 만들어도 좋을 듯 하다.


사실 알고보면 별거 아닌 너무 간단한 이슈였어서 서버관련해서 많이 약하다고 다시한번 느꼈다😭 최근에 이력서를 첨삭받으며 AWS 인프라와 서버 관련된 질문을 받았는데, 용어가 제대로 정리되어 있지 않아 설명을 하면서 많이 헷갈리곤 했다.
그래서 4월에는 서버를 직접 구축하고, 띄우면서 전체적인 서버의 흐름 파악을 공부할 예정이다.

참고: https://stackoverflow.com/questions/45740968/pid-file-found-but-no-matching-process-was-found-stop-aborted

profile
기억하기 위해 기록하고 있습니다. 포스트 중 잘못된 정보가 있다면 코멘트 남겨주세요🐰

0개의 댓글