본문 바로가기

Operating System/Linux

[Ubuntu] 서비스 관리

728x90
서비스 관리 기본 개념
  • 서비스(daemon) : 백그라운드에서 실행되며 지속적으로 동작하는 프로그램
    Ex) 웹 서버, 데이터베이스 서버
  • init 시스템 : 시스템 부팅 시 서비스 및 프로세스를 관리하는 시스템
    • SysVinit (구형 방식)
    • systemd (현대적 방식)

systemd 및 systemctl 기본 명령어
  • 대부분의 최신 리눅스 배포판(우분투, CentOS, RHEL 등)은 systemd 사용
  • 서비스 관리systemctl로 수행
  • 해당 명령어는 이전에 SSH 설정하는 포스팅에서 사용한 적이 있음

https://bestdevelop-lab.tistory.com/310

 

[Ubuntu] 네트워크 및 SSH 설정

Ubuntu 네트워크 모드 선택 NAT(Network Address Translation)가상 머신이 외부 네트워크에 접근 가능 / 호스트에서 가상 머신으로 직접 접근 불가가상 머신 → 외부 네트워크 (O) / 호스트 → 가상 머신 (X)

bestdevelop-lab.tistory.com


서비스 상태 확인
systemctl status [서비스명]


서비스 시작, 중지, 재시작
systemctl start [서비스명]   # 서비스 시작
systemctl stop [서비스명]    # 서비스 중지
systemctl restart [서비스명] # 서비스 재시작


부팅 시 자동 실행 활성화
systemctl enable [서비스명]
부팅 시 자동 실행 비활성화
systemctl disable [서비스명]

서비스 즉시 재로드
  • 설정 파일만 변경 후 적용 (프로세스 재시작 없이)
  • 'systemctl restart [서비스명]'서비스를 완전히 재시작하는 반면, reload는 서비스 프로세스를 중단하지 않고 실행되고 있는 상태에서 적용하는 것을 의미
    • restart 서비스를 종료했다가 다시 시작 (중단 시간 발생)
    • reload 현재 실행 중인 상태에서 설정을 다시 불러옴 (중단 없이 적용 가능)
  • 단, 모든 서비스가 reload를 지원하는 것이 아님
    • Apache, Nginx, MariaDB 등 일부 서비스는 reload 가능
    • 지원하지 않는 서비스는 restart 해야 적용
  • reload가 가능한지 확인하려면 해당 서비스의 systemd 설정을 확인하거나 공식 문서를 확인해야 함
systemctl reload [서비스명]


journalctl 로그 확인
  • systemd 기반의 서비스는 journalctl을 통해 로그 조회 가능
journalctl -u [서비스명]


서비스 강제 종료 및 제거
프로세스 강제 종료
kill -9 [PID]
특정 서비스 관련 프로세스 전체 종료
killall [서비스명]
서비스 완전히 제거 (패키지 매니저 사용)
apt remove [패키지명]   # Ubuntu/Debian
yum remove [패키지명]   # CentOS/RHEL

부팅 시 실행되는 서비스 목록 확인
  • STATE
    • enable : 부팅 시 자동으로 실행
      • 명령어 : systemctl enable [서비스명]
    • disable : 부팅 시 자동 실행되지 않음
      • 명령어 :  systemctl disable [서비스명]
      • 서비스가 설치되어 있으나 자동 실행되지 않아 수동으로 실행해야 함
    • static : 직접 실행할 수 없는 유닛
      • 다른 유닛에 의해 실행되도록 설정된 서비스
      • 단독으로 systemctl enable이 불가능
        Ex) getty@.service 같은 서비스특정 타겟(multi-user.target)이 실행될 때만 시작
    • masked : 실행되지 않도록 완전히 차단
      • 명령어 :  systemctl mask [서비스명]
      • 실수로 실행되지 않도록 보호하는 기능

 

  • PRESET
    • 서비스의 기본 활성화 상태를 정의하는 정책
    • preset 설정에 따라 enable 또는 disable이 기본값으로 설정
    • 일반적으로 /usr/lib/systemd/system-preset/ 디렉터리에 설정
    • systemctl preset [서비스명]을 실행하면 preset 정책에 따라 enable/disable이 자동 적용
      → 수동으로 enable이나 disable을 설정할 필요 없이 미리 정의된 정책대로 적용

 

systemctl list-unit-files --type=service

실행 중인 서비스 목록 확인
systemctl list-units --type=service --state=running


SysVinit과 systemd의 차이점
SysVinit (System V Init)
  • 유닉스 시스템에서 오래전부터 사용된 전통적인 초기화 시스템(init system)
  • /etc/inittab 파일을 기반으로 런레벨(runlevel) 개념을 사용하여 실행 수준을 정의
  • 서비스/etc/init.d/ 스크립트를 통해 관리
런레벨 (Runlevel)
  • 런레벨은 시스템의 상태를 정의
  • 각 숫자에 따라 실행되는 서비스가 다름
런레벨 설명
0 시스템 종료
1 단일 사용자 모드 (시스템 복구용)
2 다중 사용자 모드 (네트워크 X)
3 다중 사용자 모드 (네트워크 O, GUI X)
4 사용되지 않음 (사용자 정의 가능)
5 다중 사용자 모드 (네트워크 O, GUI O)
6 시스템 재부팅

systemd
  • 현대 리눅스 배포판(우분투, CentOS, RHEL 등)의 기본 init 시스템
  • 병렬 서비스 실행, 빠른 부팅, 서비스 의존성 관리 기능을 제공
  • systemctl 명령어서비스 관리
  • /lib/systemd/system//etc/systemd/system/ 디렉토리에 서비스 설정 파일 존재
systemd의 주요 특징
  • 병렬 처리
    • SysVinit : 직렬 방식(한 개씩 실행)
    • systemd 병렬 실행 가능
      부팅 속도 향상
  • 유닛(Unit) 기반 관리
    • 시스템의 모든 리소스(서비스, 타이머, 디바이스 등)를 유닛(Unit) 으로 관리
    • 유닛 종류
      • service : 서비스 관련 (예: nginx.service)
      • target : 런레벨 개념 대체 (multi-user.target, graphical.target 등)
      • timer : 크론(cron) 대체 기능 제공
  • 로그 관리
    • journalctl을 이용한 강력한 로그 시스템 제공

런레벨 vs systemd 타겟(Target)
  • systemd에서는 SysVinit의 런레벨을 타겟(target)으로 대체
SysVinit 런레벨 systemd 타겟 설명
0 poweroff.target 시스템 종료
1 rescue.target 단일 사용자 모드
3 multi-user.target 네트워크 포함 다중 사용자 모드
5 graphical.target GUI 포함 다중 사용자 모드
6 reboot.target 시스템 재부팅
# 현재 사용 중인 타겟 확인
systemctl get-default

# 타겟 변경 (예: GUI 모드로 변경)
systemctl set-default graphical.target

SysVinit과 systemd 명령어 차이
서비스 시작
# SysVinit
/etc/init.d/[서비스명] start
/etc/init.d/nginx start

# systemd
systemctl start [서비스명]
systemctl start nginx
서비스 중지
# SysVinit
/etc/init.d/[서비스명] start
/etc/init.d/nginx start

# systemd
systemctl stop [서비스명]
systemctl stop nginx
부팅 시 자동 시작 설정
# SysVinit

# (CentOS/RHEL)
chkconfig [서비스명] on   
chkconfig nginx on

# (Debian/Ubuntu)
update-rc.d [서비스명] defaults
update-rc.d nginx defaults

# systemd
systemctl enable nginx

SysVinit vs systemd 비교
비교 항목 SysVinit systemd
실행 방식 직렬 실행 병렬 실행
서비스 관리 /etc/init.d/ 스크립트 systemctl 사용
런레벨 runlevel (0 ~ 6) target 기반
부팅 속도 느림 빠름 (병렬 처리)
의존성 관리 수동으로 관리 필요 자동 의존성 관리
서비스 상태 확인 service [서비스명] status systemctl status [서비스명]
로그 시스템 /var/log/messages journalctl 사용

 

728x90