레거시 리눅스(CentOS 6/7) Run Levels 시스템과 서비스 구동 원리 이해하기
클라우드 기반의 쿠버네티스(Kubernetes)나 Systemd 기반의 최신 리눅스가 지배하는 오늘날에는 구시대의 잔재로 보일 수 있지만, 과거 사내 빅데이터 모니터링 플랫폼 솔루션을 금융/공공 기관에 납품할 때 마주했던 서버 대다수는 레거시 CentOS 6.x 기기였습니다.
장비 전원이 나갔다가 켜졌을 때, 우리 플랫폼 자바 데몬(Daemon)이나 수집기 코어(Collector)가 죽어있다면 장애로 직결됩니다. 저는 인프라 엔지니어가 아니라 개발자였지만, 고객사 온프레미스 서버에 직접 들어가 설치하고 설정해야 하는 경우가 많았기에 이런 지식들을 반드시 내 것으로 만들어야 했습니다. 리눅스의 부팅 단계인 런레벨(Runlevel) 메커니즘을 정확히 이해하고, chkconfig 자동 실행 스크립트 규격을 맞춰 작성하는 일은 그런 현장에서 살아남기 위한 필수 생존기술이었습니다.
1. 리눅스 런레벨(Runlevel)의 정의와 체계
런레벨은 시스템의 생명 기동 수준을 의미하며, 보통 0부터 6까지 7개의 계단형 모드가 존재합니다. OS가 부팅을 시작하면 낮은 레벨부터 순차적으로 드라이버나 네트워크 데몬의 전원을 켜면서 위쪽으로 등반하는 구조를 띱니다.
서버 구축 시 가장 많이 마주치는 레드햇(RedHat/CentOS) 계열의 런레벨 구성표입니다.
| 런레벨 (Runlevel) | 상태 명칭 | 실무 모의 시나리오 및 설명 |
|---|---|---|
| 0 | 정지 (Halt) | 시스템 전원 오프. (절대 기본 기동 레벨로 잡으면 안됨) |
| 1 | 싱글 유저 (Single) | root 비밀번호를 까먹었거나, 파일 시스템이 깨졌을 때 랜선 다 뽑고 혼자 들어가서 고치는 응급실 모드. |
| 2 | 다중 사용자 (NFS 미지원) | 멀티 유저는 되지만 분산 네트워크 파일 시스템(NFS)은 안 붙는 반쪽짜리 모드. 거의 안 씀. |
| 3 | 다중 사용자, 콘솔 로그인 | 서버/인프라 환경의 표준 종착역. (Full multi-user mode). 터미널 창만 덩그러니 떠 있고 메모리는 온전히 서버 데몬에 양보합니다. |
| 4 | 사용자 정의 예약 모드 | 커스텀 용도이나 실무에서 쓰는 걸 본 적이 없습니다. |
| 5 | X11 (GUI 그래픽 모드) | 다중 사용자 + 그래픽 데스크탑 모드. 윈도우처럼 생겼으나 자원 낭비가 심해 서버용으론 금기시됨. |
| 6 | 재시작 (Reboot) | 운영체제 리부팅 상태. |
참고: Ubuntu/Debian 계열은
2~5구간을 똑같이 멀티유저 GUI 모드로 퉁쳐버리는(기본값 2) 살짝 다른 체계를 가집니다.
2. 부팅 자동 실행 스크립트 작성 (chkconfig 규격)
고객사 서버 재기동 시 플랫폼 수집기 데몬(flamingo-collector)이 런레벨 3, 5 단계에 진입했을 때 알아서 백그라운드에서 켜지게 만들려면, /etc/init.d/ 디렉터리 내의 쉘 스크립트 상단에 마법의 주석 세 줄을 반드시 달아주어야 합니다. (systemd의 .service 파일 포맷이 나오기 전의 고전 방식입니다)
#!/bin/bash
# description: EXEM Flamingo Collector Daemon마법 주석의 의미 해석
2345: 이 스크립트를 런레벨 2, 3, 4, 5 단계에서 활성화(ON) 시키겠다는 타겟팅입니다.95: 런레벨이 올라가며 부팅(Start)될 때 이 스크립트를 언제 실행할지에 대한 순서(Priority)입니다. 네트워크나 DB 데몬이 먼저 켜져(예: Priority 10) 있어야 콜렉터가 정상 작동하므로, 최대한 후순위인95번으로 늦게 켜지게 만든 것입니다.05: 서버가 종료(Stop/Halt)될 때, 반대로 빨리 죽어줘야 시스템 파일락(File-lock)이 안 걸리므로 우선순위 앞번호인05로 세팅하여 프로세스를 가장 먼저 사살시킵니다.
저 구문을 스크립트에 박아두고 루트 쉘에서 chkconfig --add flamingo-collector 명령어를 한번 밀어주면, OS가 자기가 알아서 /etc/rc3.d/S95flamingo-collector 형태의 기동 심볼릭 링크 파일을 조립하며 서비스 생명 주기를 인수인계받게 됩니다.