본문 바로가기

OS/Linux

[linux] RunLevel 과 리눅스 부팅시 스크립트 자동실행


1. 리눅스 RunLevel?

간단하게 윈도우의 기본 부팅, 안전모드로 부팅 등등과 동일한 개념이라 생각하면 된다.


RunLevel 0 : 시스템 종료(halt)

RunLevel 1 : 단일 사용자, 싱글 모드

RunLevel 2 : NFS(Network File System)를 지원하지 않는 다중 사용자 모드

RunLevel 3 : 모든 기능을 포함한 다중 사용자 모드(X윈도우 지원안함)

RunLevel 4 : 사용되지 않는 실행모드(사용자가 직접정의하여 사용)

RunLevel 5 : X윈도우 부팅, GUI환경

RunLevel 6 : 시스템 재부팅


런 레벨 전환

$  init 3


기본 런 레벨 설정

/etc/inittab 를 열어서

# Default runlevel. The runlevels used by RHS are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

#

id:5:initdefault:     # 이부분을 변경한다. 보통 3이나 5.



Ubuntu / Debian 계열의 리눅스는 런레벨이 조금 다르다.

RunLevel 0 - Halt

RunLevel 1 - Single

RunLevel 2 - Full multi-user with display manager (GUI) 현재 기본

RunLevel 3 - Full multi-user with display manager (GUI)

RunLevel 4 - Full multi-user with display manager (GUI)

RunLevel 5 - Full multi-user with display manager (GUI)

RunLevel 6 - Reboot


런 레벨 전환

$ telinit N (N 에 숫자)


기본 런 레벨 설정

/etc/init/rc-sysinit.conf 열어서

# Default runlevel, this may be overriden on the kernel command-line

# or by faking an old /etc/inittab entry

env DEFAULT_RUNLEVEL=2  #이부분의 숫자를 바꿔준다.



2. 자동실행에 관해

리눅스는 부팅시 init 프로세스가 RunLevel에 따라 각 데몬을 자동 실행시키는데 이 자동실행 스크립트들이 등록된 곳이 /etc/rc0.d/ ~ /etc/rc6.d/ (rc{숫자 0  ~ 6 }.d) 이다.

ex> 런레벨 3으로 부팅시 /etc/rc3.d/ 에 등록된 스크립트들을 자동실행.


자동실행 스크립트 등록 순서

/etc/init.d/ 안에 자동실행 스크립트 작성

각각의 런 레벨에 따라 /etc/rcN.d/ 에 심볼릭 링크 생성

ex> 3레벨과 5레벨시 자동실행을 시키고자 하면 /etc/rc3.d/ 와 /etc/rc5.d/ 에 심볼링 링크를 생성한다.


3. 자동실행 스크립트 등록 예시

이전 포스팅에서 설치한 BitNami LAMPstacks의 실행 스크립트 (ctlscript.sh)를 리눅스 부팅시 자동으로 시작 되도록 등록해 보겠다.

리눅스 버전 : 우분투 서버 12.04 LTS


1. /etc/init.d/에 스크립트 작성. 파일명은 lampstacks

#vi /etc/init.d/lampstacks

#!/bin/bash

#lampstacks


export LAMP_HOME=/opt/lamp


case "$1" in

start) #on booting

echo -n "Starting LampStacks : \n"

$LAMP_HOME/ctlscript.sh start

echo

;;

stop) #on shutdown

echo -n "Shutting Down Lampstacks : \n"

$LAMP_HOME/ctlscript.sh stop

echo

;;

restart) #on restarting

echo -n "Restarting LampStacks : \n"

$LAMP_HOME/ctlscript.sh restart

echo

;;

*)

echo "Usage : $0 {start|stop|restart}"

exit 1

esac

exit 0


2. 파일 권한 주기

$ chmod 755 /etc/init.d/lampstacks


3. 실행시킬 런 레벨에 심볼릭링크 등록

예시로 2레벨과 3레벨 부팅시 자동 실행 되도록 등록 한다.

각각 /etc/rc2.d/ 와 /etc/rc3.d/ 폴더 아래에서

ln -s /etc/init.d/lampstacks S90lampstacks

심볼릭 링크들은 이름이 [S 혹은 K](숫자){이름} 형태로 등록이 되어 있는데

S는 스크립트의 실행을(start) K는 스크립트의 종료(kill)를 의미하며, 숫자는 해당 스크립트의 실행 순서이다.

폴더내에 그 숫자가 작은 스크립트부터 먼저 실행된다.


리눅스 종료시 해당 스크립트가 종료되도록

/etc/rc0.d/에도 심볼릭 링크를 등록하자

ln -s /etc/init.d/lampstacks K19lampstacks