Linux Application 개발자로 일하면서 다양한 경험을 쌓고 있습니다😄. 그러면서 Linux Embeded System이 부팅되면서 시스템 초기화를 해야하는 사항이 생겨서 이것 저것을 알아보던 중에 Systemd라는 초기화 시스템을 알게 되어서 공부를 하면서 관련된 지식을 정리하려고 합니다.
보신 후에 혹시 잘못된 내용이 있다면 알려주시면 감사하겠습니다!!
Linux에서 시스템과 서비스의 초기화 및 관리를 담당하는 init 시스템입니다. 대부분의 최신 Linux 배포판에서는 기본 초기화 시스템으로 systemd를 사용합니다. systemd는 시스템의 부팅 과정을 책임지며, 시스템이 가동되는 동안 서비스들을 시작, 중지 관리합니다.
Systemd는 Red Hat에서 일하던 Lennart Poettering과 그 동료 개발자들이 2010년에 전통적인 System V init을 대체하기 위해 개발되었습니다.
이후 Fedora에서는 2011년에 가장 먼저 채택하여 Upstart를 대체하였고, Debian은 2014년에 오랜 논쟁 끝에 Upstart 대신 systemd를 새로운 기본 init 시스템으로 선택했습니다.
| 기능 | 설명 |
|---|---|
| 서비스 관리 | 서비스 시작/중지/재시작/상태 확인 등을 systemctl로 관리 |
| 병렬 부팅 | 의존성 기반의 병렬 서비스 시작으로 부팅 속도 개선 |
| 타이머 | cron을 대체할 수 있는 정밀한 예약 실행(systemd timer) |
| 로깅 통합 | journald를 통한 로그 수집 및 조회(journalctl) |
| 디바이스/마운트 관리 | udev,mount 등을 Systemd 단위로 관리 가능 |
| 유닛 개념 | 서비스, 타이머, 소켓 등을 유닛 단위로 추상화하여 관리 |
systemd는 모든 것을 Unit이라는 단위로 관리합니다. 각 Unit은 시스템의 다른 부분을 관리합니다. 대표적인 Unit 종류는 아래와 같습니다.
/etc/fstab에 있는 마운트 지점을 systemd unit으로 변환 가능Systemd unit 파일은 다음과 같은 구조로 이루어옂 있습니다. 보통 /etc/systemd/system/에 위치해있습니다.
[Unit]
Description=설명
After=network.target
[Service]
ExecStart=/usr/bin/myservice
Restart=on-failure
[Install]
WantedBy=multi-user.target
Unit의 메타 정보, 의존성 정보를 나타내는 부분
서비스의 실행 방법을 나타내는 부분
simple)simple : 기본값. ExecStart 명령이 데몬 역할forking : 백그라운드 데몬oneshot : 단일 실행 후 종료(ex. 설정 스크립트)notify : 데몬이 systemd에 직접 상태 알림idle : 다른 유닛 실행 후 유후 시 실행부팅 시 활성화 설정을 나타내는 부분
enable시 심볼릭 링크로 연결됨서비스나 타이머를 systemd로 실행하는 방법은 다음과 같습니다.
systemctl start [Unit Name] : 유닛 즉시 실행systemctl stop [Unit Name] : 유닛 즉시 중단 systemctl restart [Unit Name] 유닛 재시작systemctl status [Unit Name] : 유닛 상태 확인systemctl enable [Unit Name] : 부팅 시 자동 실행 등록systemctl disable [Unit Name] : 부팅 시 자동 실행 해제systemctl list-units --type=service : 활성화된 서비스 확인다음과 같이 systemd에 대해서 알아보고 systemd Unit 작성 및 실행 방법까지 알아보았습니다. systemd를 통해서 Linux System의 초기화를 진행하면 아주 편한 것 같네요!!
다른 분들도 초기화 작업을 할 때, systemd를 사용하면 좋겠습니다😄.