systemd
는 현대 리눅스 배포판에서 기존 SysV init
시스템을 대체하여 시스템 부팅과 서비스 관리를 담당하는 PID 1번 프로세스이다.
그럼 이제 systemd가 무엇이고, 왜 생겼으며, 어떤 기능을 제공하는지 간단히 알아보자.
systemd는 리눅스 운영체제에서 시스템과 서비스의 초기화 및 관리를 담당하는 init 시스템이다.
이름에서 알 수 있듯이 system daemon
의 줄임말이다. 부팅 시 가장 먼저 실행되어 PID 1을 차지하고, 그 이후 모든 사용자 공간 프로세스의 부모 역할을 한다.
기존의 init 시스템(SysVinit 등)은 다음과 같은 단점을 가지고 있었다:
이런 문제를 해결하고 현대적인 서비스 관리, 병렬 부팅, 고급 제어 기능을 제공하기 위해 systemd가 등장했다.
부팅 시 서비스를 병렬로 실행하여 속도를 크게 향상시킴
systemd는 다양한 단위를 .service, .socket, .mount 등 "유닛(Unit)"으로 관리.
유닛 종류:
service: 데몬/서비스
socket: 소켓 활성화용
mount: 마운트 지점
timer: 주기적 실행 (cron 대체 가능)
target: 런레벨 유사 기능
서비스 간 의존 관계 정의 가능 (Requires=, After= 등)
자동으로 순서를 계산해서 실행
systemctl status
를 통해 서비스 상태 확인 가능
journalctl
을 통해 모든 로그를 중앙 집중 관리
# 서비스 시작/중지/재시작
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
파일은 특정 서비스를 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 | .slice | cgroup 기반 자원 분배 단위 |
scope | .scope | 수동으로 생성된 프로세스 그룹용 (비정규 유닛) |