ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 기본정리 ] init 프로세스와 런레벨
    Technique/LINUX 2016. 5. 10. 23:11
    반응형

    init 프로세스는 PID가 1번인 프로세스로 모든 프로세스의 조상 역할을 한다

    init 프로세스는 부팅 과정에서 커널에 의해 실행되고, 각종 서비스를 제공하는 다른 프로세스를 동작시키는 역할을 한다.


    1. init 프로세스

    유닉스에서 유래된 전통적인 init 프로세스는 스크립트를 순차적으로 실행하여 다른 프로세스들을 동작시켰다. 그러나 최근 우분투를 비롯해 유닉스나 리눅스 대부분이 스크립트를 순차적으로 실행하는 기존의 방식을 바꿔 이벤트 기반으로 동작하는 방식으로 init를 대체하고 있다.

    우분투는 자체적으로 개발한 upstart를 init대신 사용하는데 다만 기존의 유닉스 및 리눅스 환경과의 호환을 위해 실행 파일 이름은 init를 유지하고 있다.


    init의 동작 방식이 바뀜에 따라 전통적으로 init 프레소스와 관련된 설정 파일이었던 /etc/inittab 파일은 이제 우분투에서 사라졌다.


    2. init 프로세스와 스크립트 파일

    기존의 init와 새로운 upstart는 모두 프로세스를 실행하거나 종료하기 위해 스크립트 파일을 사용한다. 우분투에는 upstart가 사용하는 스크립트와 함께 기존의 방식으로 동작하는 init 스크립트도 공존하고 있다. 설치하는 서비스에 따라 upstart용 스크립트가 설치되기도 하고 기존의 init용 스크립트가 설치되기도하여 약간 혼란스러운 부분이 있다. 만약 /etc/init 디렉토리와 /etc/init.d 디렉토리에 같은 서비스에 대한 파일이 있다면 /etc/init 디렉토리의 스크립트 파일이 우선적으로 적용된다.


    upstart가 사용하는 작업 파일

    upstart와 관련된 스크립트 파일은 /etc/init 디렉토리에 '작업명.conf' 파일로 구성되어 있다.


    기존 init용 스크립트 파일

    기존의 init가 사용하는 스크립트 파일은 /etc/init.d 디렉토리에 있다.

    그런데 /etc/init 디렉토리와 /etc/init.d 디렉토리에 같은 서비스와 관련된 스크립트들이 있다. 이와 같이 upstart 스크립트가 있는 경우 /etc/init.d. 디렉토리에 있는 스크립트 중 일부는 /lib/init/upstart-job 에 대한 심볼릭 링크이다.

    upstart-job는 해당 서비스의 upstart 스크립트를 찾아서 실행 시킨다. 이는 우분투에서 아직 모든 서비스가 upstart로 바뀌지 않았기 때문에 일어나는 현상이라고 생각하면 된다. 


    3.init 스크립트 시작하고 정지하기

    upstart 스크립트 시작하고 정지하기

    upstart에서는 서비스를 제공하는 프로세스를 작업이라고 부른다. upstart 스크립트는 두가지 방법으로 작업을 시작하거나 정지할 수 있다.

    - initctl [ start | stop | restart | reload | status ] 작업명

    - [ start | stop | restart | reload | status ] 작업명

    사실은 위의 두가지 방법 모두 initctl 명령을 사용하는 것이다. start, stop, restart, reload, status 명령이 모두 initctl 명령에 대한 심볼릭 링크이기 때문이다.


    init 스크립트 시작하고 정지하기

    기존의 init 스크립트는 두가지 방법으로 실행할 수 있다.

    - service 스크립트명 [ start | restart | stop | status ]

    - /etc/init.d 스크립트명 [ start | stop | restart | status ]

    service 명령에서 start, stop, restart 등 서브 명령은 해당 스크립트에 지정된 값에 따라 적용된다.


    4. init 프로세스와 런레벨

    기존의 init 프로세스는 런레벨 ( Run Level ) 이라는 개념을 사용했다. init는 시스템의 단계를 일곱 개로 구분하여 정의하고 각 단계에따라 셸 스크립트를 실행하는데 이 단계들을 런레벨이라고 한다.


    - 유닉스

     런레벨 

     의미 

     관련 스크립트의 위치 

     0 

     시스템 종료 

     /etc/rc0.d 

     1, S, s 

     단일 사용자 모드 

     /etc/rc1.d 

     2 

     다중 사용자 모드 ( NFS 를 실행하지 않음 )  

     /etc/rc2.d 

     3 

     다중 사용자 모드 ( NFS 포함 ) 

     /etc/rc3.d 

     4 

     사용하지 않음 ( 예비 번호 ) 

     /etc/rc4.d 

     5 

     시스템 종료( 페도라의 경우 GUI 모드로 부팅 ) 

     /etc/rc5.d 

     6 

     시스템 재시작 

     /etc/rc6.d 


    -우분투

     런레벨

     의미 

     관련 스크립트 위치 

      0

     시스템 종료 

      /etc/rc0.d 

     1, S, s

     단일 사용자 모드 

      /etc/rc1.d /etc/rcS.d

     2

     다중 사용자 모드 ( NFS 를 실행하지 않음 ) 

      /etc/rc2.d 

     3

     런레벨 2와 동일

      /etc/rc3.d 

     4

      /etc/rc4.d 

     5

      /etc/rc5.d 

     6

      시스템 재시작 

      /etc/rc6.d 


    반응형

    댓글

Designed by Tistory.