9. 도서관/__라. LINUX

system Run Level

행복 금융 2008. 9. 26.
system Run Level

시스템 관리자가 시스템을 shut down하거나 reboot할 때 편리하게 system service나 resource를 사용할 수 있도록 8개의 run level이 정의 되어 있다.

Run level init state 기능
0 Power Down 시스템이 shut down되고, 모든 사용자는 강제로 사용정지된다. 모든 운영체제 서비스가 종료되고, 시스템은 firmware 상태로 된다. SPARC에서는 ok 프롬프트가 된다.
's 또는 S Single User 시스템은 가장 기본이 되는 서비스만 제공되며, 다른 사용자는 log off된다. 콘솔에서 command-line 모드로 superuser 권한으로만 사용할 수 있다. 그러므로 시스템 관리자가 다른 방해 없이 시스템 backup과 같은 일을 수행할 수 있다.
1 Administrative 다른 log-on한 사용자에게는 아무런 영향을 미치지 않으며, 여러 사용자가 log on하여 시스템 자원을 사용할 수 있다. 가장 기본이 되는 운영체제를 서비스를 제외한 모든 서비스의 제공이 제외된다. 마운트된 파일 시스템도 그대로 유지되고, superuser 권한을 갖은 commmand-line 모드가 되어 콘솔에서 사용한다. 그러므로 시스템 관리자는 다른 사용자의 접속을 허용하면서 시스템 유지 관리를 수행할 수 있다.
2 Multiuser 시스템은 normal 상태에서 동작한다. 여러 사용자가 log on하여 시스템 자원을 사용할 수 있다. NFS(network file system) server를 제외한 모든 서비스가 제공된다. 또한 모든 디폴트 파일 시스템이 마운트 된다.
3 Multiuser with NFS 시스템은 normal 상태에서 동작한다. 이것이 디폴트 시스템 상태이다. 여러 사용자가 log on하여 시스템 자원을 사용할 수 있다. NFS(network file system) server를 포함한 모든 서비스가 제공된다. 또한 모든 디폴트 파일 시스템이 마운트 된다.
4 alternative 이 상태는 아직 사용할 수 없다.
5 Power down 시스템은 shut down되며, 모든 사용자는 log off된다. 모든 운영체제 서비스가 중지되며, 시스템의 전원을 끌 수 있는 안전한 상태가 된다. 하드웨어적으로 전원 차단이 되는 시스템에서는 자동으로 전원이 꺼진다.
6 Reboot run level 0와 같이 shut down 되지만, 다시 재부팅된다. /etc/inittab 파일에 지정한 사항이 백업되어 올라오는데 이는 run level 3과 같은 기능이다.

system run level 변경

정전, 시스템 위치 이전, 시스템에 장치 추가/제거, 백업등과 같은 작업을 위해서는 시스템의 run level을 바꿀 필요가 있다. 다음 표에 command-line 에서 system run level을 변경하는 명령이다.

Commands used to change the system run level
command path run level descript-xion
halt /usr/sbin 0 stops the processors
init /sbin 0,1,2,3,4,5,6,s processes control initialization
poweroff /usr/sbin 5 stops the processors and power off the system
reboot /usr/sbin 6 reboots the system
shutdown /etc/ 0,1,5,6,s /usr/sbin의 shutdown과 같음
shutdown /usr/sbin 0,1,5,6,s system run level을 바꿈
telinit /etc 0,1,2,3,4,5,6,s /usr/sbin/init와 같음
uadmin /sbin 0,5,6 adminstrative control을 사용

halt 명령어는 system log에 shutdown 되는 과정을 기록하여 저장하며, 또한 pending information을 하드 디스크에 저장하기 위하여 sync 명령이 실행된다. halt 명령어는 프로세서를 모두 종료시키고 system이나 account에 logging을 하지 못하도록 한다. halt 명령어는 run levle 0로 전환시키지만, shutdown명령어나 init 명령어에 따라 실행하던 run level 0에 수반하는 rc스크립트는 실행하지 않는다.

inittelinit 명령어는 8개의 run level 중 하나로 전환하기 위하여 사용되는 명령어이다. run levle의 등급에 따라 실행되도록 /etc/inittab 파일에 지정한 것은 따르지만, /etc/inittab 파일에 지정되지 않은 채로 실행되고 있는 프로세스들에게는 SIGTERM 신호나 SIGKILL 신호를 보내서 종료토록 한다. 각 run level에 따른 /etc/inittab의 엔트리에는 프로세스를 start/stop 하기 위한 적절한 rc script-x가 있어야 한다.

poweroff 명령어는 run level 5로 시스템을 변경하는 것이다. 정상적으로 system log에 shutdown에 대한 기록하고, 시스템 accounting file에 shutdown에 대한 record를 기록한다. 또한 pending information을 sync 명령을 통해 하드 디스크에 저장하고, 프로세서를 정지하며, 전원을 차단하기도 한다. poweroff 명령은 init 5 명령과 같은 기능을 수행하는 것이다.

reboot 명령어는 run level 6로 시스템을 변경하는 것이다. 정상적으로 system log에 shutdown에 대한 기록하고, 시스템 accounting file에 shutdown에 대한 record를 기록한다. 또한 pending information을 sync 명령을 통해 하드 디스크에 저장하며, multiuser를 reboot로 초기화한다.
reboot는 OpenBoot의 boot 명령에 --를 사용하여 아규먼트를 지정할 수 있는 유일한 명령으로 reboot -- -rv는 OpenBoot의 boot 명령에서 옵션 r과 v를 사용한 것과 같다. 여기서 옵션 r은 reconfigure(즉 모든 device와 node를 검증함)하고, v 옵션은 verbose 모드로 실행토록한다.

shutdown 명령어는 /usr/sbin과 /etc에 두 군데 디렉토리에 있는 명령이다. 이 명령은 어느 정도의 시간을 가지고 경고 메시지를 보내고, rc script-x를 실행시淪느막館 사용자가 능동적으로 대치할 수 있다. shutdown 명령은 run level 0,1,5,6,s로 변경하는 명령이다.
shutdown 명령에 아무런 아규먼트도 없이 실행시키면 1분후에, 30초 후에, 그리고 지금 당장에 shutdown 된다는 경고 메시지를 차례로 보낸다. 그러므로 shutdown now 메시지를 받기전에 계속할지 확인을 받고 확인이 있으면 run level은 계속상태로 전환된다. 그렇게 하여 run level s로 시스템을 변경하게 된다.

uadmin 명령어는 기본적으로 administrative function, 즉 시스템에 대해 shuting down이나 rebooting과 같은 기능을 수행한다. 전형적으로 이것은 다양한 시스템 adminstration procedure를 실행하지만 대체로 사용되지 않는다.
who -r 명령을 사용하여 현재의 run level을 확인할 수 있고 또한 언제 run level을 전환했는지 알 수 있다.

% who -r
. run-level 3 9월 16일 15:07 3 0 S
%


Run Control(rc) script-xs

앞에서 설명한 바와 같이 run level 4를 제외한 다른 모든 run level의 실행에 필요한 rc 프로그램의 엔트리는 /etc/inittab 파일에 담겨 있으며, 부가적으로 각각의 런 레벨에 필요한 rc script-x가 담긴 각각의 run level에 해당하는 디렉토리가 있다.
그러므로 각 디렉토리에는 해당 run level에서 필요로 하는 rc 스크립트가 준비되어 프로세서를 stop/start하는데 사용된다.
run level 0는 해당하는 rc 프로그램은 /etc/rc0에 있고, rc script-x는 /etc/rc0.d 디렉토리에 있다.
run level 1는 해당하는 rc 프로그램은 /etc/rc1에 있고, rc script-x는 /etc/rc1.d 디렉토리에 있다.
이와같이 하여 run level 2,3,s도 각각 rc 프로그램은 /etc/rc2, /etc/rc3, /etc/rcs에 있고, rc script-x는 /etc/rc2.d, /etc/rc3.d, /etc/rcs.d 디렉토리에 있다.
그러나 run level 5,6은 별도로 rc 디렉토리를 갖지 않고 run level 0의 rc 디렉토리를 사용하고 있더.

본래, rc 프로그램과 rc 스크립트 디렉토리에 있는 것 둘 다 모두 rc script-x로 참고된다. 참고되는 스크립트는 /etc/inittab로부터 요구받게 된다.

rc script-x는 여러 프로세스를 stop/start하기 위해 쓰여진 쉘 스크립트이다. 통상, rc script-x는 두 부분으로 되어 있는데, 한 부분은 start portion이고 다른 부분은 stop portion이다.
이 름으로부터 감지 했듯이 start portion은 서비스가 시작되기 위하여 사용되고, stop portion은 서비스를 stop하기 위하여 사용되는 부분이다. 그러므로 하나의 스크립트가 그 서비스를 컨트롤 할 수 있는 것이다. rc 프로그램이 rc 스크립트라 불리는 것은 프로그램이 rc 스크립트에서 start나 stop 명령중 어느 하나를 부르기 때문이다. 어느 지정한 서비스를 start하거나 stop하는 것을 결정하는 것은 해당 rc 디렉토리에서 rc 스크립트의 이름에 근간을 둔다.
예를 들어, UNIX에서 자동으로 실행하고 명령어를 관리하는 프로그램이 바로 cron 프로그램이다. cron은 run level 2에서 시작되고 run level 0,1,5,6,s에서 정지된다.
run level 2에서 cron을 시작하기 위해서, cron rc script-x를 /etc/rc2.d 디렉토리에 카피하여 이를 S75cron이라 하자. 여기서 rc script-x의 첫자 S는 rc 프로그램이 지정한 run level에서 서비스가 시작됨을 가리킨다.
같은 의미로, cron rc script-x를 /etc/rc0.d, /etc/rc1.d, /etc/rcS.d 디렉토리에 카피하여 이를 K40cron이라 하자. 여기서 rc script-x의 첫자 K는 rc 프로그램이 지정한 run level에서 서비스가 종료됨을 가리킨다.

cron rc script-x에 서 보는 바와 같이 부여되는 번호는 번호가 낮은 번호가 높은 번호보다 먼저 실행된다. 어떤 서비스는 먼저 다른 서비스를 실행된 다음에 실행되도록 설정되어 있는 경우도 있기 대문에 부여되는 번호의 순서가 필요하게 된다.
예를 들어, start에서 networking application은 networking service가 먼저 필요한 경우라면 그 networking application을 실행하기 위하여 networking application의 rc script-x는 networking service 번호보다 뒷번호를 가져야 한다. 이러한 경우에, stop시켜야 할 경우에는 networking application이 먼저 정지하고 networking servece가 정지되어야 하기 대문에 networking application의 rc 스크립트 번호가 networking service의 번호보다 낮아야 한다.

정리하면, A와 B 스크립트가 있는데, B 스크립트는 A 스크립트가 운영되고 있어야 하는 조건이라면, S로 시작하는 번호에서는 10A, 20B와 같은 번호로 이루어지지만,K로 시작하는 번호에서는 10B, 20A처럼 start 번호와 stop 번호는 역순으로 되어야 한다.

복사된 모든 rc script-x는 /etc/init.d 디렉토리에 존재하며, 어떤 특수한 서비스를 start/stop하기 위해서는 시스템 관리자는 필요한 rc script-x를 어떤 하나의 디렉토리에 놓으면 된다.


rc script-x 추가

새로운 서비스에 따라 rc script-x의 추가는 다음과 같은 과정을 따른다.

1) start/stop에 필요한 명령문을 쉘 스크립트로 작성한다.
2) superuser가 새로 작성한 rc script-x를 /etc/init.d 디렉토리에 복사한다.
3) 해당 서비스를 start할 run level를 결정한다.(보통 2임)
4) 00∼99까지의 2 자리로 된 start할 순서 번호를 지정한다.
5) /etc/init.d 디렉토리에 새로 작성한 스크립트를 run level에 적합한 rc 디렉토리에 복사하거나 링크하여 S로 시작하는 두 자리 숫자와 서비스 이름을 부여한다.
6) 서비스가 stop될 run level를 결정한다. (보통 0,1,s임)
7) 00∼99까지의 2 자리로 된 stop할 순서 번호를 지정한다.
8) /etc/init.d 디렉토리에서 run level에 적합한 rc 디렉토리에 복사하거나 링크하여 K로 시작하는 두 자리 숫자와 서비스 이름을 부여한다.

Network File System

'9. 도서관 > __라. LINUX' 카테고리의 다른 글

윈도우(Microsoft Windows)에서 우분투(Ubuntu) 원격 접속하기  (0) 2008.09.29
Re: font problem - please help!  (0) 2008.09.29
Mysql 기초  (0) 2008.09.19
우분투 wireshark 설치  (0) 2008.09.18
Linux Setting perl  (0) 2008.09.10

댓글

💲 추천 글