-
SysVinitTechnique/LPIC 2019. 4. 16. 14:57반응형
시스템의 전류를 넣고 난 뒤 Linux가 기동되는 수순은 요 수년간 크게 변화하였다. 이전까지는 UNIX 계 OS 전반에 넓게 사용되었던 SysVinit( System Five Init) 가 주류로, 지금까지는 LPIC에서도 SysVinit를 전제로 하였었다. 그러나 현재는 Systemd라는 새로운 기동 방법이 주류가 되었다. LPIC에는 SysVinit 와 systemd 양쪽 다 지식을 요한다.
SysVinit
SysVinit는 UNIX의 SystemV로 채용되어있던 기동의 방법을 따르고 있기 때문에 그렇게 불린다.
Linux 시스템에 최초로 실행된 프로세스인 init 가 /etc/inittab 파일의 설정에 따라 시스템이 필요한 서비스를 순차적으로 기동시킨다.- init가 /etc/inittab 파일을 읽음
- init가 /etc/rc.sysinit 스크립트를 읽음
- init가 /etc/rc 스크립트를 실행한다.
- /etc/rc 스크립트가 /etc/rc(run level).d 디렉터리 이하의 스크립트를 실행한다.
SysVinit에는 새롭게 결정한 순서로 서비스가 기동되어 가기에 특정 서비스의 기동에 문제가 생겨 멈춰버리면 뒤 순서의 서비스가 기다리는 문제가 발생한다. 최종적으론 기동 완료까지 시간이 꽤 걸려 버린다. 그 때문에 현재 많은 디스트리뷰션이 systemd 가 Upstart 라고 하는 새로운 방법으로 바꿔가고 있다.
Upstart
SysVinit를 개선한 새로운 init의 방법으로서 Upstart가 있다.
SysVinit에는 서비스 A를 기동하는 경우 그전에 서비스 B를 기동한다. 이러한 의존관계를 적절히 처리하는 것이 불가능하며, 관리자가 관리할 필요가 있다. 또 서비스를 병렬로 기동 불가능하기 때문에 컴퓨터의 성능에 따라서 기동에 시간이 걸리는 결점이 있다, Upstart 에서는 그것들이 개선되어 서비스의 의존관계를 적절히 설정하거나, 서비스를 병렬로 기동하는 것으로 인해 단시간에 시스템을 기동하는 것이 가능해졌다.
Upstart의 특징은 이벤트 구동형인 것이다. 이벤트는 런 레벨의 변경이나 파일 시스템의 마운트와 같은 시스템 상의 변화를 나타낸다. Upstart의 init 데몬은 이벤트의 발생을 트리거로 지정한 처리를 실행한다. 잡은 데몬이나 시스템 서비스 등의 상주형 서비스와 어떠한 처리를 실행한 뒤 종료하는 TASK가 있다
Upstart는 일시적으로 RedHat Enterprise Linux나 Ubuntu에 채용되어 있지만, 그 뒤 systemd에 이동을 추천한다.Run Level
SysVinit를 채용하고 있는 시스템에서는 런 레벨이라고 불리는 여러 동작 모드가 있다. 런 레벨에 따라 어떠한 서비스가 가동되는지 ( 또는 가동하지 않는지 )결정 가능하다. 예를 들어 런 레벨 5에서는 클라이언트 PC로서 필요한 GUI 환경을 이용 가능하다, 런 레벨 3에서는 각종 서버 소프트웨어를 이용한 네트워크 서비스를 제공한다
런 레벨은 다음과 같은 종류가 있다. 런 레벨의 정의는 디스트리뷰션에 따라 조금 다르다.
Red Hat Enterprise Linux, CentOS, Fedora의 경우런 레벨 설명 0 정지 1 단일 유저 모드 2 멀티 유저 모드 ( 텍스트 로그인 NFS 서버는 정지 ) 3 멀티 유저 모드 ( 텍스트 로그인 ) 4 미사용 5 멀티 유저 모드 ( GUI 로그인 ) 6 재기동 S 또는 s 단일 유저 모드 Ubuntu, Debian GNU/Linux 런레벨
런 레벨 설명 0 정지 1 싱글 유저 모드 2 멀티 유저 모드 3 멀티 유저 모드 4 멀티 유저 모드 5 멀티 유저 모드 6 재기동 S 또는 s 싱글 유저 모드 단일 유저 모드는 Root 유저만 이용 가능한 특수한 형태이다.
단일 유저 모드에는 일반 유저는 로그인이 불가능하기에 시스템의 메인터넌스 같은 일반 유저가 시스템을 이용하면 곤란한 경우 사용된다.
런 레벨의 확인과 변경현재의 런 레벨을 표시하기 위해선 runlevel 커맨드를 사용한다. runlevel 커맨드는 현재의 런레벨과 그전의 런 레벨을 표시한다.
다음의 예는 현재의 런 레벨은 3이고, 그전의 런 레벨은 N으로 되어 있는데 이는 막 기동했기에 수정하기 전의 런 레벨이 존재하지 않기 때문이다.runlevel N 3
런 레벨을 변경하기 위해서는 관리자 유저 ( root )로 init 커맨드 또는 telinit 커맨드를 사용한다. 다음의 예에는 런 레벨 1 ( 단일 유저 )로 변경한다.
init 1
일반 유저의 로그인 중에 돌연 단일 유저 모드에 변경하면 일반 유저는 일시적으로 조작이 되지 않게 된다. 그렇기에 로그인 중의 유저에게 메시지를 보내어 로그아웃을 유도하도록 하는 것이 좋다.
wall 커맨드를 사용하면 특정 메시지를 유저의 단말에 송신하는 것이 가능하다.wall 'This system is going down to maintenance mode! please logout'
기동 스크립트에 따른 서비스의 관리
SysVinit에는 각종 서비스의 기동에는 /etc/init.d. 디렉터리 이하에 준비된 기동 스크립트가 사용된다. 일반적으로는 런 레벨이 다르면 기동되는 서비스도 다르다. /etc/rc(run level).d 디렉터리를 보면 각종 run level이 기동하는 서비스, 종료하는 서비스의 스크립트 파일이 배치되어 있다. 예를 들어 /etc/rc3.d 디렉터리에는 run level3이 될 경우 이용 가능한 스크립트가 배치되어 있다.
파일명이 K로 시작하는 파일과 S로 시작하는 파일이 있다. 어느 쪽이든 /etc/init.d 디렉터리 이하에 있는 기동 스크립트의 심벌릭 링크이다.ls -l /etc/rc3.d/S90crond
기동 스크립트는 시스템 서비스의 각종 서버를 기동하거나, 재기동 하거나 종료하거나 하는 경우에 이용한다.
Default Run level 설정Linux가 기동하면 최초의 프로세스로서 init가 실행되고 지정된 run level의 스크립트를 기동 시킨다. default run level은 /etc/inittab에 저장되어 있다.
run level을 설정할 경우 0이나 6을 지정하면 시스템을 기동하다가 도중에 종료시키는 무한 반복에 들어가 버린다.반응형'Technique > LPIC' 카테고리의 다른 글
부트로더 설치 (0) 2019.04.18 하드디스크의 레이아웃 설계 (0) 2019.04.18 리눅스의 기동과 종료 (0) 2019.04.16 기본적인 시스템 하드웨어 (0) 2019.04.16 LPIC와 LinuC는? (0) 2019.04.15