Systemd 간략 소개

강정우·약 21시간 전
0

Dev_Ops

목록 보기
21/21
post-thumbnail

systemd란?

systemd는 현대 리눅스 배포판에서 기존 SysV init 시스템을 대체하여 시스템 부팅과 서비스 관리를 담당하는 PID 1번 프로세스이다.

그럼 이제 systemd가 무엇이고, 왜 생겼으며, 어떤 기능을 제공하는지 간단히 알아보자.

🔧 systemd란?

systemd는 리눅스 운영체제에서 시스템과 서비스의 초기화 및 관리를 담당하는 init 시스템이다.
이름에서 알 수 있듯이 system daemon의 줄임말이다. 부팅 시 가장 먼저 실행되어 PID 1을 차지하고, 그 이후 모든 사용자 공간 프로세스의 부모 역할을 한다.

🚀 systemd가 등장한 이유

기존의 init 시스템(SysVinit 등)은 다음과 같은 단점을 가지고 있었다:

  1. 순차적 서비스 실행 → 부팅 속도 느림
  2. 병렬 실행 부족
  3. 서비스 의존성 부족한 처리
  4. 서비스 상태 확인/관리 도구 부재
  5. 로그 관리 기능 없음

이런 문제를 해결하고 현대적인 서비스 관리, 병렬 부팅, 고급 제어 기능을 제공하기 위해 systemd가 등장했다.

🌟 systemd의 주요 특징

1. 🔁 병렬 서비스 실행

부팅 시 서비스를 병렬로 실행하여 속도를 크게 향상시킴

2. 📦 유닛(Unit) 기반 구조

systemd는 다양한 단위를 .service, .socket, .mount 등 "유닛(Unit)"으로 관리.

유닛 종류:
service: 데몬/서비스
socket: 소켓 활성화용
mount: 마운트 지점
timer: 주기적 실행 (cron 대체 가능)
target: 런레벨 유사 기능

3. 🔁 의존성 관리

서비스 간 의존 관계 정의 가능 (Requires=, After= 등)
자동으로 순서를 계산해서 실행

4. 🧠 상태 및 로깅

systemctl status를 통해 서비스 상태 확인 가능
journalctl을 통해 모든 로그를 중앙 집중 관리

5. 🧰 기타 기능

  1. 소켓 기반 서비스 활성화
  2. 타이머 기반 작업 스케줄링
  3. CGroup 기반 자원 관리
  4. 컨테이너 지원 (nspawn 등)
  5. 사용자 단위 서비스 관리

🛠️ 주요 명령어 예시

# 서비스 시작/중지/재시작
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# 서비스 상태 확인
sudo systemctl status nginx

# 서비스 자동 시작 설정
sudo systemctl enable nginx
sudo systemctl disable nginx

# 모든 활성 서비스 확인
systemctl list-units --type=service

# 부팅 로그 보기
journalctl -b

그럼 이제 systemd 를 사용하기위해 필수적으로 알아야하는 .service 에 대해 간략히 알아보자.

.service

.service 파일은 특정 서비스를 systemd가 어떻게 시작하고 관리할지를 정의하는 설정 파일이다.
위치는 보통 /etc/systemd/system/ 또는 /lib/systemd/system/ 이다.

아래는 예제 .service 스크립트이다.

[Unit]
Description=My Custom App Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=always
User=ubuntu

[Install]
WantedBy=multi-user.target

[Unit]: 유닛의 메타정보 및 의존성 설정
Description=: 설명
After=: 이 유닛이 실행되기 전에 완료되어야 할 유닛

[Service]: 서비스 실행 방법 정의
ExecStart=: 실행할 명령
Restart=: 종료 후 자동 재시작 여부
User=: 실행할 사용자

[Install]: enable 할 때 어떤 target에 연결할지 정의
WantedBy=multi-user.target: 일반적인 런레벨에서 실행됨

[참고] 📦 주요 systemd 유닛(Unit) 종류 요약

유닛 종류확장자설명
service.service데몬/서비스 정의
socket.socket소켓 활성화용 (서비스 자동 실행 트리거)
target.target런레벨 그룹처럼 유닛 묶음
mount.mount파일 시스템 마운트 관리
automount.automount자동 마운트 설정
timer.timer타이머 기반 작업 (cron 대체 가능)
path.path파일/디렉터리 변화 감지 후 서비스 실행
slice.slicecgroup 기반 자원 분배 단위
scope.scope수동으로 생성된 프로세스 그룹용 (비정규 유닛)

reference

systemd 란 무엇인가

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글