WIPIVERSE

runit

runit은 유닉스 계열 운영체제용 초기화(init) 및 서비스 감독(service supervision) 체계이다. 독일의 개발자 게리트 파페(Gerrit Pape)가 개발하였으며, 기존의 sysvinit 및 기타 init 체계의 대체물로 설계되었다. 이 소프트웨어는 자유 소프트웨어로 배포되며, GNU/Linux, BSD 계열, macOS, Solaris 등 다양한 유닉스 운영체제에서 실행된다.

개요

runit은 운영체제 부팅 과정에서 최초로 실행되는 프로세스(PID 1)로서 시스템의 부팅, 운영, 종료를 총괄한다. 또한 서비스 매니저로서 개별 데몬(daemon) 프로세스를 시작하고, 모니터링하며, 프로세스가 비정상적으로 종료될 경우 자동으로 재시작하는 기능을 제공한다. 이는 댄 번스타인(Dan J. Bernstein)이 작성한 daemontools 프로세스 감독 도구 모음의 재구현에 해당한다.

설계 구조

runit은 시스템 초기화 작업을 세 단계(stage)로 나누어 수행한다.

  • Stage 1: /etc/runit/1 스크립트를 실행하여 일회성 초기화 작업을 수행한다. 시스템의 기본적인 설정, 파일 시스템 마운트 등의 작업이 여기서 처리된다.
  • Stage 2: /etc/runit/2 스크립트를 실행하며, 일반적으로 runsvdir이라는 프로세스를 구동한다. runsvdir은 지정된 디렉터리의 서비스 각각에 대해 감독 프로세스(runsv)를 생성하여 데몬의 실행과 재시작을 관리한다.
  • Stage 3: /etc/runit/3 스크립트를 실행하여 시스템 종료 및 재부팅 시 필요한 정리 작업을 수행한다.

이러한 3단계 구조를 통해 부팅 시 서비스들을 병렬로 시작할 수 있어 시스템 부팅 시간을 단축할 수 있다는 장점이 있다.

구성 요소

runit 패키지에는 여러 개별 프로그램이 포함되어 있다.

  • runit: 시스템의 PID 1 프로세스로 동작하는 핵심 프로그램
  • runit-init: /sbin/init을 대체하여 커널이 직접 호출하는 진입점 역할
  • runsvdir: 여러 서비스의 감독을 총괄하는 프로세스
  • runsv: 개별 서비스의 상태를 감독하고 재시작을 관리하는 프로세스
  • sv: 서비스의 시작, 정지, 상태 확인 등을 위한 제어 명령

사용 방식

runit은 두 가지 방식으로 사용될 수 있다. 첫째, sysvinit을 완전히 대체하여 시스템의 기본 init 시스템으로 사용하는 방식이다. 둘째, 기존 init 시스템과 병행하여 별도의 서비스 감독 도구로 사용하는 방식이다. 또한 일반 사용자가 자신의 개인 서비스를 관리하기 위해 권한 없이(비특권 사용자로) 사용할 수도 있다.

채택 현황

runit은 다음 운영체제에서 기본 init 시스템으로 채택된 바 있다.

  • Void Linux: runit을 기본 init 시스템으로 사용하는 대표적인 배포판
  • antiX: 데비안 기반 배포판으로, 버전 19부터 기본 init 시스템으로 채택
  • Dragora GNU/Linux-Libre: 버전 2부터 runit을 기본으로 사용

또한 Gentoo 등 여러 배포판에서 공식적으로 선택 가능한 init 시스템으로 지원된다.

개발 및 유지보수

runit의 최초 배포는 2004년 2월에 이루어졌다(버전 1.0.0). 이후 지속적으로 개발이 진행되어 왔으며, 최근 버전으로는 2024년 9월에 배포된 2.2.0 버전과 2026년 2월에 배포된 2.3.1 버전이 확인된다. 소스 코드는 GitHub를 통해 공개 관리되고 있으며, 개발 관련 논의는 supervision 메일링 리스트에서 이루어진다.

의의

runit은 systemd와 같은 대형 init 시스템에 비해 상대적으로 작고 단순한 코드베이스를 유지하면서도, 서비스 감독과 자동 재시작이라는 핵심 기능을 안정적으로 제공하는 데 초점을 맞춘다. 이러한 특성 때문에 가벼운 시스템, 서버, 컨테이너 환경 등에서 init 시스템으로 선호되는 경우가 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기