우분투 리눅스 systemd 서비스 상태 확인과 로그 점검 순서

우분투 서버 운영에서 systemd 서비스 점검이 중요한 이유

우분투(Ubuntu) 리눅스 서버를 운영하다 보면 웹서버, 데이터베이스, 백그라운드 데몬 등 다양한 프로그램이 systemd를 통해 관리됩니다. 서버에 문제가 생겼을 때 가장 먼저 해야 할 일은 해당 서비스가 정상적으로 실행 중인지 확인하고, 오류가 발생했다면 어떤 원인으로 멈췄는지 로그를 분석하는 것입니다. 이번 글에서는 초보자도 혼란 없이 안전하게 systemd 서비스 상태를 점검하고 로그를 추적할 수 있는 단계별 순서를 정리합니다.

1단계: systemctl 명령어로 서비스 기본 상태 확인하기

특정 서비스의 현재 상태와 실행 여부를 파악하려면 systemctl status 명령어를 사용합니다. 예를 들어 Nginx 웹서버의 상태를 확인하려면 아래 명령어를 입력합니다.

sudo systemctl status nginx

출력 결과에서 Active: active (running)으로 표시되면 정상 작동 중인 상태입니다. 만약 failed 또는 inactive로 나온다면 서비스가 정상적으로 켜져 있지 않거나 도중에 중단된 것입니다.

자주 쓰는 기본 상태 점검 명령어

  • 실행 중인 모든 서비스 목록 확인: systemctl list-units --type=service
  • 실패한 서비스만 모아서 확인: systemctl --failed
  • 서비스 활성화 여부(부팅 시 자동 시작) 확인: systemctl is-enabled nginx

2단계: journalctl을 이용한 서비스 로그 추적하기

서비스가 정상 작동하지 않거나 갑자기 종료되었다면 journalctl 명령어로 시스템 로그를 조회해야 합니다. systemd는 모든 서비스의 로그를 저널(journal)이라는 통합 구조로 수집하기 때문에 문제 원인을 파악하기에 매우 유용합니다.

특정 서비스의 로그를 최근 내용 위주로 확인하려면 아래 명령어를 사용합니다.

sudo journalctl -u nginx -n 50

여기서 -u nginx는 Nginx 서비스 전용 로그를 뜻하고, -n 50은 가장 최근의 로그 50줄만 출력하라는 의미입니다.

실전 로그 조회 팁

  • 실시간으로 로그 모니터링: sudo journalctl -u nginx -f (로그가 발생할 때마다 화면에 실시간으로 표시됩니다.)
  • 오늘 발생한 로그만 필터링: sudo journalctl -u nginx --since today
  • 오류(Error) 수준 이상의 로그만 보기: sudo journalctl -u nginx -p err

3단계: 서비스 재시작 및 설정 검증

로그를 통해 원인을 파악하고 설정 파일을 수정했다면, 서비스를 안전하게 재시작하여 반영해야 합니다. 다만 곧바로 재시작하기 전에 설정 파일에 문법 오류가 없는지 먼저 검사하는 것이 안전합니다. 예를 들어 Nginx의 경우 아래 명령어로 설정 무결성을 검증합니다.

sudo nginx -t

설정에 이상이 없다면 아래 명령어로 서비스를 재시작합니다.

sudo systemctl restart nginx

만약 기존 연결을 끊지 않고 설정을 부드럽게 반영하고 싶다면 리로드(reload) 명령어를 활용할 수 있습니다.

sudo systemctl reload nginx

systemd 서비스 점검 체크리스트

문제가 발생했을 때 아래 순서대로 점검을 진행하면 원인을 빠르게 파악할 수 있습니다.

  • systemctl --failed 명령어로 전체 시스템에서 실패한 서비스가 있는지 확인
  • 점검 대상 서비스의 상세 상태를 systemctl status [서비스이름]으로 조회
  • 설정 파일 변경 사항이 있다면 프로그램 자체의 문법 검증 명령어 실행
  • journalctl -u [서비스이름] -n 100 명령어로 최근 오류 메시지 상세 분석
  • 필요에 따라 systemctl restart [서비스이름]으로 서비스 재시작 후 정상 구동 확인

초보자가 자주 하는 실수와 주의사항

systemd 서비스를 다룰 때 초보자들이 흔히 겪는 실수를 미리 숙지하면 장애 시간을 줄일 수 있습니다.

  • 로그를 보지 않고 무작정 재시작하기: 원인을 모른 채 restart만 반복하면 임시 조치에 그칠 뿐 근본적인 문제가 해결되지 않습니다. 반드시 journalctl로 에러 메시지를 먼저 확인해야 합니다.
  • 권한 누락: 일반 사용자 계정으로 systemctl이나 journalctl을 실행하면 전체 로그가 보이지 않거나 권한 거부 오류가 발생합니다. 관리자 권한인 sudo를 붙여서 실행하세요.
  • 활성화(enable)와 시작(start)의 혼동: systemctl start는 당장 실행하는 것이고, systemctl enable은 서버를 재부팅했을 때 자동으로 켜지도록 설정하는 것입니다. 서비스 구축 후에는 두 가지 모두 확인하는 것이 안전합니다.

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다