dev.Log

리눅스 시작 서비스(init, systemd) 정리 본문

BACKEND.*/Server

리눅스 시작 서비스(init, systemd) 정리

초코푸딩 2025. 12. 31. 09:51

리눅스를 쓰다 보면
“이 프로그램은 왜 부팅할 때 자동으로 실행될까?”
라는 생각을 한 번쯤 하게 된다.

이때 등장하는 개념이 바로 시작 서비스다.

시작 서비스란 간단히 말해
시스템이 부팅되는 과정에서 자동으로 실행되는 프로그램이나 스크립트를 의미한다.

SSH, 네트워크, 웹 서버, GUI 로그인 화면 같은 것들은
모두 시작 서비스의 한 종류다.


1. init이란 무엇인가

리눅스에서 커널 부팅이 끝나면
가장 먼저 실행되는 사용자 공간 프로세스가 있다.

 
PID 1 = init

이 init 프로세스는 시스템 전체의 시작을 관리한다.

  • 어떤 서비스들을 실행할지
  • 어떤 순서로 실행할지
  • 어떤 상태에서 실행할지

이 모든 것을 init 시스템이 책임진다.


2. 옛날 방식: SysVinit

과거 리눅스 배포판들은 SysVinit 방식을 사용했다.

2-1. init.d

/etc/init.d/ 디렉토리에는
각 서비스별 실행 스크립트가 들어 있다.

 
/etc/init.d/ssh start /etc/init.d/ssh stop

이 스크립트들은 단순히 프로그램을 실행하고 종료하는 역할을 한다.


2-2. runlevel

SysVinit에서는 부팅 단계를 runlevel이라는 숫자로 구분했다.

대표적으로:

  • runlevel 3: 텍스트 모드 + 네트워크
  • runlevel 5: 그래픽 모드

실제로는 다음 디렉토리들이 사용된다.

 
/etc/rc3.d/ /etc/rc5.d/

이 안에는 init.d 스크립트의 심볼릭 링크가 걸려 있고,
부팅 시 해당 runlevel에 맞는 서비스들이 자동 실행된다.


2-3. rc.local

/etc/rc.local은 조금 다른 개념이다.

  • 부팅이 거의 끝난 뒤
  • 딱 한 번 실행되는 스크립트

예를 들면:

 
#!/bin/sh echo "boot completed" > /tmp/boot.log

특징:

  • 서비스 개념이 아님
  • 의존성 관리 없음
  • 에러가 나도 시스템은 그냥 진행

그래서 테스트용이나 임시 작업에 자주 사용됐다.


3. 요즘 방식: systemd

현재 대부분의 리눅스 배포판은 systemd를 사용한다.

systemd는 기존 init 시스템을 대체하는
통합 서비스 관리자다.


3-1. service

systemd에서는 모든 실행 단위를 service로 관리한다.

 
[Unit] Description=My Service [Service] ExecStart=/usr/bin/myapp [Install] WantedBy=multi-user.target

systemd는 다음을 모두 관리한다.

  • 시작 / 종료
  • 재시작
  • 실패 감지
  • 로그 관리

3-2. target (runlevel 대체)

systemd는 runlevel 대신 target이라는 개념을 사용한다.

SysVinitsystemd
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

이 서비스가 실행되면:

  1. X 서버(또는 Wayland)를 실행하고
  2. 로그인 화면을 띄우고
  3. 데스크톱 환경을 시작한다

그래서 Display Manager를 사용하면
startx를 직접 입력할 필요가 없다.


6. 언제 어떤 방식을 쓰면 될까

상황추천 방식
실험용 OS rc.local, 로그인 스크립트
개인 서버 systemd service
배포판/제품 systemd service
레거시 시스템 init.d 유지

마무리

리눅스의 시작 서비스는
부팅이라는 흐름 속에서 무엇을, 언제, 어떻게 실행할지를 결정하는 구조다.

과거에는 init.d와 rc.local이 중심이었고,
현재는 systemd가 그 역할을 맡고 있다.

이 구조를 이해하면
부팅 문제, 서비스 자동 실행, GUI 시작 방식까지
한 번에 정리된다.

Comments