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 [서비스명]
- 실수로 실행되지 않도록 보호하는 기능
- enable : 부팅 시 자동으로 실행
- 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
'Operating System > Linux' 카테고리의 다른 글
[Ubuntu] 프로세스 관리 (0) | 2025.03.01 |
---|---|
[Ubuntu] 리눅스 권한 (1) | 2025.02.25 |
[Ubuntu] 그룹 계정 관리 (0) | 2025.02.20 |
[Ubuntu] 사용자 계정 관리 (0) | 2025.02.20 |
[Ubuntu] 리눅스 계정 종류, Root 계정 및 시스템 계정 관리 (0) | 2025.02.20 |