시스템이 부팅될 때, init는 /etc/inittab 설정파일을 읽어들이도록 되어 있다. 또한, 시스템이 가동 중일 때도 HUP 시그널을 받으면 이 설정파일을 다시 읽어들인다. [1] 따라서 init의 설정을 변경했다고 해서 그것을 적용시키기 위해 시스템을 리부팅시킬 필요는 없다.
/etc/inittab 파일은 좀 복잡하다. 일단 여기서는 getty에 관한 부분만을 한가지 예로서 살펴보기로 하자. /etc/inittab은 다음과 같이 콜론으로 나눠진 네 부분으로 구성된다.
id:runlevels:action:process |
이것은 해당 라인을 다른 부분과 식별시켜 준다. getty를 설정하는 부분에서는, 이곳에 터미널 번호를 지정해주도록 되어 있다(이것은 장치 파일 이름에서 /dev/tty뒤에 따라오는 숫자이다). 물론 getty 설정 부분이 아닌 곳에서는 이렇지 않다. id는 길이 제한이 있으며, 파일내에서는 유일한 것이어야 한다.
이것은 해당 라인이 어떤 실행 레벨(run level)에서 유효한지를 지정하는 부분이다. 실행 레벨은 한자리 숫자로 표현되며, 특별한 구분기호 없이 연속적으로 여러 실행 레벨을 써넣을 수 있다(실행 레벨은 다음 섹션에서 설명한다).
여기서는, 해당 라인이 어떻게 동작해야 하는지를 지정한다 예를 들어, 이곳에 respawn이라고 쓰게 되면 그 다음 영역에 있는 명령이 종료될 때마다 그것을 재실행 하게 된다. once라고 쓰게 되면 실행을 딱 한번만 하게 된다.
이곳에 실행시킬 명령이 들어간다.
1:2345:respawn:/sbin/getty 9600 tty1 |
만일 터미널이나 다이얼 인 모뎀 라인을 시스템에 추가하고 싶다면, 그들 각각을 위한 설정 라인을 /etc/inittab에 추가하여야 한다. 이것에 관해 더욱 자세한 내용은 init, inittab, getty의 매뉴얼 페이지를 참고하기 바란다.
어떤 명령이 실행에 실패한다면, init는 그것을 다시 재실행하게 된다. 그러나, 재실행하고 실패하고 다시 재실행하고 실패하고.. 이와 같이 끝없이 반복된다면, 이것은 시스템의 자원을 굉장히 많이 소비하게 된다. 이런 일을 막기위해서 init는 명령이 얼마나 자주 재실행되는지를 점검하고 있다가, 어떤 명령이 지나치게 자주 반복되면 그것을 5분간 다시 실행하지 않는다.
[1] | 예를 들면, 루트로 kill -HUP 1 명령을 내리면 된다. |
[2] | getty의 버전이 다르면, 그 실행 명령도 다르다. 매뉴얼 페이지를 참조하되, 그것이 getty의 버전에 맞는 것인지를 꼭 확인하기 바란다. |