dev.Log
리눅스 시작 서비스(init, systemd) 정리 본문
리눅스를 쓰다 보면
“이 프로그램은 왜 부팅할 때 자동으로 실행될까?”
라는 생각을 한 번쯤 하게 된다.
이때 등장하는 개념이 바로 시작 서비스다.
시작 서비스란 간단히 말해
시스템이 부팅되는 과정에서 자동으로 실행되는 프로그램이나 스크립트를 의미한다.
SSH, 네트워크, 웹 서버, GUI 로그인 화면 같은 것들은
모두 시작 서비스의 한 종류다.
1. init이란 무엇인가
리눅스에서 커널 부팅이 끝나면
가장 먼저 실행되는 사용자 공간 프로세스가 있다.
이 init 프로세스는 시스템 전체의 시작을 관리한다.
- 어떤 서비스들을 실행할지
- 어떤 순서로 실행할지
- 어떤 상태에서 실행할지
이 모든 것을 init 시스템이 책임진다.
2. 옛날 방식: SysVinit
과거 리눅스 배포판들은 SysVinit 방식을 사용했다.
2-1. init.d
/etc/init.d/ 디렉토리에는
각 서비스별 실행 스크립트가 들어 있다.
이 스크립트들은 단순히 프로그램을 실행하고 종료하는 역할을 한다.
2-2. runlevel
SysVinit에서는 부팅 단계를 runlevel이라는 숫자로 구분했다.
대표적으로:
- runlevel 3: 텍스트 모드 + 네트워크
- runlevel 5: 그래픽 모드
실제로는 다음 디렉토리들이 사용된다.
이 안에는 init.d 스크립트의 심볼릭 링크가 걸려 있고,
부팅 시 해당 runlevel에 맞는 서비스들이 자동 실행된다.
2-3. rc.local
/etc/rc.local은 조금 다른 개념이다.
- 부팅이 거의 끝난 뒤
- 딱 한 번 실행되는 스크립트
예를 들면:
특징:
- 서비스 개념이 아님
- 의존성 관리 없음
- 에러가 나도 시스템은 그냥 진행
그래서 테스트용이나 임시 작업에 자주 사용됐다.
3. 요즘 방식: systemd
현재 대부분의 리눅스 배포판은 systemd를 사용한다.
systemd는 기존 init 시스템을 대체하는
통합 서비스 관리자다.
3-1. service
systemd에서는 모든 실행 단위를 service로 관리한다.
systemd는 다음을 모두 관리한다.
- 시작 / 종료
- 재시작
- 실패 감지
- 로그 관리
3-2. target (runlevel 대체)
systemd는 runlevel 대신 target이라는 개념을 사용한다.
| runlevel 3 | multi-user.target |
| runlevel 5 | graphical.target |
target은 단순히 숫자가 아니라
여러 서비스의 묶음 상태를 의미한다.
4. init.d와 rc.local은 이제 못 쓰는가?
아니다. 여전히 사용할 수는 있다.
- init.d 스크립트는 systemd가 호환 실행해준다.
- rc.local도 rc-local.service 형태로 동작한다.
다만 권장되지는 않는다.
이유:
- 의존성 관리가 어렵다
- 부팅 순서가 불명확하다
- 디버깅이 힘들다
새로 만드는 서비스라면
systemd service를 쓰는 것이 정석이다.
5. Display Manager도 시작 서비스다
GUI 로그인 화면을 담당하는 Display Manager 역시
시작 서비스의 한 종류다.
예:
- gdm.service
- lightdm.service
- sddm.service
이 서비스가 실행되면:
- X 서버(또는 Wayland)를 실행하고
- 로그인 화면을 띄우고
- 데스크톱 환경을 시작한다
그래서 Display Manager를 사용하면
startx를 직접 입력할 필요가 없다.
6. 언제 어떤 방식을 쓰면 될까
| 실험용 OS | rc.local, 로그인 스크립트 |
| 개인 서버 | systemd service |
| 배포판/제품 | systemd service |
| 레거시 시스템 | init.d 유지 |
마무리
리눅스의 시작 서비스는
부팅이라는 흐름 속에서 무엇을, 언제, 어떻게 실행할지를 결정하는 구조다.
과거에는 init.d와 rc.local이 중심이었고,
현재는 systemd가 그 역할을 맡고 있다.
이 구조를 이해하면
부팅 문제, 서비스 자동 실행, GUI 시작 방식까지
한 번에 정리된다.
'BACKEND.* > Server' 카테고리의 다른 글
| SonarQube 실행 오류: vm.max_map_count 값이 뭐길래 서버가 안 뜰까? (0) | 2026.01.02 |
|---|---|
| 커널파라미터 - 네트워크 버퍼 설정 (1) | 2025.07.14 |
| 쿠버네티스는 왜 SWAP을 비활성해야하나? (0) | 2025.04.23 |
| 네트워크매니저 고장 (0) | 2025.02.15 |
| 두 가지 솔루션을 도커로 패키징하기 (0) | 2025.02.15 |