Linux 서버를 운영하다 보면 특별한 작업을 하지 않았는데도 웹 서버나 데이터베이스, 애플리케이션 서비스가 갑자기 종료되는 경우가 있습니다. 서비스를 다시 실행하면 정상적으로 동작하지만 일정 시간이 지나면 동일한 문제가 반복되기도 합니다.
이러한 문제는 단순히 서비스 자체의 오류뿐만 아니라 메모리 부족, 시스템 설정, 권한 문제, 디스크 공간 부족, 프로그램 오류 등 다양한 원인으로 발생할 수 있습니다. 따라서 무조건 서비스를 다시 시작하기보다는 먼저 종료 원인을 확인하는 것이 중요합니다.
이번 글에서는 Linux 서비스가 자동으로 종료되는 대표적인 원인과 실무에서 확인하는 방법을 자세히 알아보겠습니다.
서비스가 자동으로 종료되는 대표적인 원인
다음과 같은 상황에서 서비스가 자동으로 종료될 수 있습니다.
- OOM(Out Of Memory) Killer 실행
- 프로그램 내부 오류
- 설정 파일 오류
- 디스크 공간 부족
- 권한 문제
- 시스템 업데이트
- 프로세스 충돌
- 서비스 의존성 문제
- systemd 설정 오류
먼저 어떤 이유로 종료되었는지 확인하는 것이 가장 중요합니다.
1. 서비스 상태 확인하기
먼저 현재 서비스 상태를 확인합니다.
systemctl status 서비스명
예를 들어 Apache 웹 서버를 확인하려면 다음과 같이 실행합니다.
systemctl status httpd
또는 Ubuntu 계열에서는 다음과 같습니다.
systemctl status apache2
Active 상태와 종료 시간, 종료 원인을 함께 확인합니다.
2. 서비스 로그 확인하기
systemd 로그를 확인합니다.
journalctl -u 서비스명
최근 로그만 확인하려면 다음 명령어를 사용할 수 있습니다.
journalctl -u 서비스명 -n 100
서비스가 종료되기 직전에 어떤 오류가 발생했는지 확인합니다.
3. 시스템 로그 확인하기
서비스 외에도 시스템 전체 로그를 확인하는 것이 좋습니다.
journalctl -xe
또는
dmesg
메모리 부족이나 디스크 오류 등이 기록되어 있을 수 있습니다.
4. OOM Killer 확인하기
메모리 부족으로 종료되는 경우가 매우 많습니다.
dmesg | grep -i oom
또는
journalctl -k | grep -i "Killed process"
OOM Killer 로그가 있다면 메모리 부족이 원인입니다.
5. 디스크 공간 확인하기
디스크 공간 부족으로 서비스가 종료될 수도 있습니다.
df -h
로그 파일을 저장하지 못하거나 데이터베이스가 중단되는 원인이 될 수 있습니다.
6. 메모리 사용량 확인하기
현재 메모리 상태를 확인합니다.
free -h
Available 메모리와 Swap 사용량을 함께 확인합니다.
7. 서비스 설정 파일 확인하기
설정 파일 오류가 있는지 확인합니다.
예를 들어 Nginx는 다음과 같이 테스트할 수 있습니다.
nginx -t
Apache는 다음 명령어를 사용합니다.
apachectl configtest
설정 파일 오류는 서비스 종료의 대표적인 원인 중 하나입니다.
8. 최근 변경 사항 확인하기
최근 시스템 변경 사항을 확인합니다.
last
또는
history
누군가 설정을 변경했거나 업데이트가 수행되었는지 확인합니다.
9. 자동 재시작 설정 확인하기
systemd의 자동 재시작 설정도 확인합니다.
systemctl cat 서비스명
또는
systemctl show 서비스명
Restart 옵션이 어떻게 설정되어 있는지 확인합니다.
10. 실시간 로그 확인하기
서비스를 다시 실행하면서 로그를 확인합니다.
journalctl -fu 서비스명
실시간으로 오류가 발생하는 시점을 확인할 수 있습니다.
서비스 종료 문제를 확인하는 순서
실무에서는 다음 순서대로 확인하는 것이 가장 효율적입니다.
- systemctl status
- journalctl -u
- journalctl -xe
- dmesg
- OOM Killer 확인
- df -h
- free -h
- 설정 파일 검사
- 최근 변경 사항 확인
- 실시간 로그 확인
이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.
서비스를 확인할 때 주의할 점
서비스가 종료되었다고 해서 바로 재시작하는 것은 권장되지 않습니다.
원인을 확인하지 않은 상태에서 반복적으로 재시작하면 동일한 문제가 계속 발생할 수 있으며, 데이터 손상이나 서비스 중단 시간이 길어질 수도 있습니다.
반드시 로그를 먼저 확인하고 종료 원인을 분석한 후 서비스를 재시작하는 것이 좋습니다.
자주 묻는 질문
서비스가 종료되었는데 로그가 없습니다.
로그 저장 위치가 변경되었거나 로그가 삭제되었을 수 있습니다. journalctl과 애플리케이션 전용 로그를 함께 확인하는 것이 좋습니다.
서비스는 실행 중인데 접속이 되지 않습니다.
서비스 자체는 정상 실행 중이지만 방화벽, 포트 충돌 또는 네트워크 설정 문제일 수 있습니다.
서비스가 매일 같은 시간에 종료됩니다.
예약 작업(Cron), 시스템 업데이트 또는 자동 유지보수 작업이 실행되는지 확인해 보는 것이 좋습니다.
마무리
Linux 서비스가 자동으로 종료되는 원인은 매우 다양하며 하나의 원인만 있는 경우는 드뭅니다. systemctl, journalctl, dmesg, free, df 등의 명령어를 함께 활용하면 종료 원인을 빠르게 파악할 수 있습니다. 특히 서비스 로그와 시스템 로그를 함께 분석하는 습관을 들이면 반복되는 문제를 근본적으로 해결하는 데 큰 도움이 됩니다.