getty를 실행하기 위한 init 설정: /etc/inittab 파일

시스템이 부팅될 때, init/etc/inittab 설정파일을 읽어들이도록 되어 있다. 또한, 시스템이 가동 중일 때도 HUP 시그널을 받으면 이 설정파일을 다시 읽어들인다. [1] 따라서 init의 설정을 변경했다고 해서 그것을 적용시키기 위해 시스템을 리부팅시킬 필요는 없다.

/etc/inittab 파일은 좀 복잡하다. 일단 여기서는 getty에 관한 부분만을 한가지 예로서 살펴보기로 하자. /etc/inittab은 다음과 같이 콜론으로 나눠진 네 부분으로 구성된다.
id:runlevels:action:process
이제 각각의 영역을 자세히 살펴보자. 참고로, /etc/inittab은 빈 줄을 포함할 수 있으며, #로 시작하는 줄은 무시된다.

id

이것은 해당 라인을 다른 부분과 식별시켜 준다. getty를 설정하는 부분에서는, 이곳에 터미널 번호를 지정해주도록 되어 있다(이것은 장치 파일 이름에서 /dev/tty뒤에 따라오는 숫자이다). 물론 getty 설정 부분이 아닌 곳에서는 이렇지 않다. id는 길이 제한이 있으며, 파일내에서는 유일한 것이어야 한다.

runlevels

이것은 해당 라인이 어떤 실행 레벨(run level)에서 유효한지를 지정하는 부분이다. 실행 레벨은 한자리 숫자로 표현되며, 특별한 구분기호 없이 연속적으로 여러 실행 레벨을 써넣을 수 있다(실행 레벨은 다음 섹션에서 설명한다).

action

여기서는, 해당 라인이 어떻게 동작해야 하는지를 지정한다 예를 들어, 이곳에 respawn이라고 쓰게 되면 그 다음 영역에 있는 명령이 종료될 때마다 그것을 재실행 하게 된다. once라고 쓰게 되면 실행을 딱 한번만 하게 된다.

process

이곳에 실행시킬 명령이 들어간다.

일반적인 다중 사용자 실행 레벨(multi-user run level, 2번부터 5번까지임)에서 getty를 첫번째 가상 터미널에 띄우고 싶다면, 다음과 같이 해야 한다.
1:2345:respawn:/sbin/getty 9600 tty1
첫번째 부분은 이 라인이 /dev/tty1을 위한 것이라는 점을 알려준다. 두번째 부분은 이것이 실행 레벨 2,3,4,5번에 적용되도록 지정한 것이며, 세번째 부분은 명령의 실행이 종료될 때마다 다시 실행되도록 하는 부분이다(즉, 로그아웃했다가 다시 로그인 , 로그아웃 할 수 있도록). 마지막 부분은 명령으로서, 첫번째 가상 터미널에 getty를 띄우라고 지시하고 있다. [2]

만일 터미널이나 다이얼 인 모뎀 라인을 시스템에 추가하고 싶다면, 그들 각각을 위한 설정 라인을 /etc/inittab에 추가하여야 한다. 이것에 관해 더욱 자세한 내용은 init, inittab, getty의 매뉴얼 페이지를 참고하기 바란다.

어떤 명령이 실행에 실패한다면, init는 그것을 다시 재실행하게 된다. 그러나, 재실행하고 실패하고 다시 재실행하고 실패하고.. 이와 같이 끝없이 반복된다면, 이것은 시스템의 자원을 굉장히 많이 소비하게 된다. 이런 일을 막기위해서 init는 명령이 얼마나 자주 재실행되는지를 점검하고 있다가, 어떤 명령이 지나치게 자주 반복되면 그것을 5분간 다시 실행하지 않는다.

Notes

[1]

예를 들면, 루트로 kill -HUP 1 명령을 내리면 된다.

[2]

getty의 버전이 다르면, 그 실행 명령도 다르다. 매뉴얼 페이지를 참조하되, 그것이 getty의 버전에 맞는 것인지를 꼭 확인하기 바란다.