본문 바로가기
  • 아하하
Linux

리눅스 서버에서 Tomcat 프로세스 관리와 자동 재시작 제어 완벽 가이드

by 쥬쥬파파 2025. 5. 7.
리눅스 서버에서 Tomcat 프로세스 관리와 자동 재시작 제어 완벽 가이드

리눅스 서버에서 Tomcat 프로세스 관리와 자동 재시작 제어 완벽 가이드

리눅스 서버 운영을 하다 보면 Tomcat이나 기타 데몬 프로세스가 정상적으로 종료되지 않거나, kill -9로도 죽지 않고 다시 살아나는 현상, 그리고 시스템 재부팅 시 원하지 않는 서비스가 자동으로 실행되는 문제 등 다양한 상황을 마주하게 됩니다.
이 글에서는 실제 현업에서 자주 접할 수 있는 다음 5가지 질문과 그에 대한 실전 해결법을 상세히 정리했습니다.
Tomcat 프로세스 강제 종료, 자동 재시작 원인 파악과 해제, 서비스 자동 시작 방지까지 한 번에 마스터하세요!

목차

  1. Tomcat 프로세스가 정상 종료되지 않을 때 원인과 해결법
  2. kill -9로 프로세스를 죽여도 다시 살아나는 이유
  3. 프로세스 자동 재시작 설정 확인 방법
  4. 프로세스 자동 재시작 해제 방법
  5. 시스템 재부팅 시 서비스 자동 시작 방지 방법

1. Tomcat 프로세스가 정상 종료되지 않을 때 원인과 해결법

Tomcat did not stop in time. PID file was not removed.와 같은 메시지와 함께 Tomcat이 종료되지 않고 프로세스가 남아있는 경우, 서버 운영자라면 반드시 원인을 파악하고 조치해야 합니다.

주요 원인

  • 애플리케이션 종료 지연: Tomcat은 기본적으로 종료 명령 후 5초(5000ms)만 기다립니다. 이 시간 내 모든 애플리케이션이 정상 종료되지 않으면 프로세스가 남아있고 PID 파일도 삭제되지 않습니다.
  • /etc/hosts 설정 문제: 서버의 호스트명이 /etc/hosts에 올바르게 등록되어 있지 않으면 종료 시 지연 또는 실패가 발생할 수 있습니다.
  • 백그라운드 스레드 미정리: 애플리케이션에서 데몬 스레드, 타이머, RMI 등 백그라운드로 동작하는 부분이 정상적으로 종료되지 않으면 Tomcat이 완전히 내려가지 않습니다.
  • PID 파일 문제: 프로세스가 이미 죽었는데 PID 파일이 남아있거나, 반대로 프로세스가 살아있는데 PID 파일이 삭제되지 않는 경우가 있습니다.

실전 해결 방법

  1. 프로세스 강제 종료
    ps -ef | grep java로 Tomcat 프로세스 확인 후, kill -9 <PID>로 강제 종료.
    종료 후 rm -f /kisco/epro/tomcat/bin/catalina.pid로 PID 파일도 삭제.
  2. Tomcat 종료 대기 시간 늘리기
    shutdown.sh-force 또는 -timeout 옵션을 추가해 종료 대기 시간을 늘려줍니다.
    $CATALINA_HOME/bin/shutdown.sh -force -timeout 30 (30초 대기)
  3. /etc/hosts 파일 점검
    127.0.0.1 localhost localhost.localdomain 서버호스트명이 올바르게 등록되어 있는지 반드시 확인.
  4. 애플리케이션 백그라운드 스레드 점검
    종료 시 모든 스레드가 정상적으로 종료되는지 소스코드 또는 로그를 통해 확인.

핵심 요약: 프로세스 강제 종료 및 PID 파일 삭제, 종료 대기 시간 조정, hosts 파일 점검, 애플리케이션 스레드 관리가 중요합니다.


2. kill -9로 프로세스를 죽여도 다시 살아나는 이유

kill -9 명령으로 프로세스를 강제 종료했음에도 불구하고, 동일한 프로세스가 다시 살아난다면 반드시 자동 감시/재시작 시스템을 의심해야 합니다.

주요 원인

  • systemd, upstart 등 서비스 관리자에 의한 재시작
    Restart=always 등으로 설정된 서비스는 죽을 때마다 자동으로 재기동됩니다.
  • 모니터링/감시 스크립트
    cron이나 별도의 bash 스크립트가 프로세스를 감시하며 죽으면 즉시 재시작할 수 있습니다.
  • 부모 프로세스에 의한 재생성
    부모 프로세스가 자식 프로세스를 지속적으로 생성하는 구조일 수 있습니다.
  • 데몬화(Daemon) 설정
    데몬 모드로 실행된 프로세스가 종료 시 바로 재시작되도록 설계된 경우입니다.

진단 및 해결 방법

  1. systemd 서비스 확인
    systemctl status <서비스명> 또는 systemctl cat <서비스명>Restart 옵션 확인.
  2. 감시 스크립트/크론탭 점검
    crontab -l, cat /etc/crontab, ps aux | grep 'restart_script' 등으로 감시 스크립트 존재 여부 확인.
  3. 부모 프로세스 추적
    ps -ef | grep <프로세스명>로 부모 PID(PPID) 확인 후, 필요시 부모 프로세스 종료.
  4. 데몬 설정 파일 점검
    /etc/init.d/ 또는 기타 데몬 스크립트에서 respawn 등 자동 재시작 옵션 확인.

실무 팁: 자동 재시작 원인을 찾기 위해서는 systemd 설정감시 스크립트를 모두 점검하는 것이 중요합니다.


3. 프로세스 자동 재시작 설정 확인 방법

프로세스가 자동으로 재시작되는 설정은 주로 systemd 서비스 파일이나 감시 스크립트에서 관리합니다.

systemd 서비스 설정 확인

  1. 서비스 파일 확인
    systemctl cat <서비스명> 또는 cat /etc/systemd/system/<서비스명>.service로 서비스 파일을 확인합니다.
    Restart=always, Restart=on-failureRestart 옵션이 있으면 자동 재시작이 활성화된 상태입니다.
  2. 드롭인(override) 설정 확인
    ls /etc/systemd/system/<서비스명>.service.d/에서 추가 설정 파일 존재 여부 확인.
    cat /etc/systemd/system/<서비스명>.service.d/*.confRestart 관련 옵션 점검.

감시 스크립트 및 크론탭 확인

  • 사용자 크론탭: crontab -l
  • 시스템 크론탭: cat /etc/crontab, ls /etc/cron.*
  • 감시 및 재시작 스크립트: ps aux | grep 'monitor' 또는 grep -rin '프로세스명' /etc/cron*

기타 모니터링 도구

Supervisor, Monit, IBM WAS 등의 별도 관리 도구가 있다면 해당 도구의 설정 파일(supervisord.conf 등)에서 자동 재시작 옵션을 확인해야 합니다.

핵심 요약: systemd 서비스 파일과 감시 스크립트, 기타 모니터링 도구 설정을 모두 점검해야 자동 재시작 원인을 정확히 파악할 수 있습니다.


4. 프로세스 자동 재시작 해제 방법

프로세스의 자동 재시작을 원천적으로 차단하려면 systemd 서비스의 Restart 옵션을 제거하고, 감시 스크립트도 함께 비활성화해야 합니다.

systemd 서비스 자동 재시작 해제

  1. 서비스 파일 수정
    /etc/systemd/system/<서비스명>.service 또는 /lib/systemd/system/<서비스명>.service 파일을 열어 [Service] 섹션의 Restart=... 라인을 삭제하거나 주석 처리합니다.
  2. 설정 적용
    sudo systemctl daemon-reloadsudo systemctl restart <서비스명>로 적용.
  3. 서비스 자동 시작 해제
    sudo systemctl disable <서비스명>로 부팅 시 자동 시작도 함께 해제할 수 있습니다.
  4. 마스킹(완전 차단) 옵션
    sudo systemctl mask <서비스명>로 수동 실행까지 완전히 차단할 수 있습니다.

감시 스크립트/크론탭 해제

  • 사용자 크론탭(crontab -e)에서 관련 명령 삭제
  • 시스템 크론탭(/etc/crontab)이나 /etc/cron.* 내 감시 스크립트 제거

실전 팁: systemd와 감시 스크립트 모두 점검해야 진짜로 자동 재시작이 완전히 차단됩니다.


5. 시스템 재부팅 시 서비스 자동 시작 방지 방법

리눅스에서 systemd로 관리되는 서비스의 경우, disable 명령어로 부팅 시 자동 실행을 손쉽게 해제할 수 있습니다.

서비스 자동 시작 비활성화

  1. 자동 시작 해제
    sudo systemctl disable <서비스명>
  2. 즉시 중지 및 자동 시작 해제
    sudo systemctl disable --now <서비스명>
  3. 상태 확인
    systemctl is-enabled <서비스명> 결과가 disabled면 정상적으로 해제된 것.
  4. 완전 차단(마스킹)
    sudo systemctl mask <서비스명>로 수동 실행까지 차단 가능.

핵심 요약: systemctl disable <서비스명>만으로도 부팅 시 자동 실행을 확실히 막을 수 있습니다.


마치며

서버 운영에서 Tomcat 프로세스 관리자동 재시작 제어는 매우 중요한 실무 역량입니다.
위에서 소개한 진단 및 해결 방법을 숙지하면, 예상치 못한 서비스 장애나 불필요한 데몬 실행을 효과적으로 통제할 수 있습니다.
systemd, 감시 스크립트, 서비스 자동 시작 관리는 모든 리눅스 서버 관리자에게 필수적인 지식입니다.
궁금한 점은 언제든 댓글로 남겨주세요!

반응형