/etc/inittab을 이용하는 방법
inittab는 도스에서 autoexec.bat와 같은 기능을 한다고 보면 된다.
init 프로그램은 리눅스가 동작하면서 가장 먼저 수행되어 시스템에 필요한 처리를 하는 프로그램을 동작 시키고 대기하는 프로그램입니다.
이 방식을 사용하여 얻어지는 이점은 사용법이 간단하다는 것입니다. 그리고 프로그램이 죽으면 다시 자동으로 실행시켜 줍니다. 프로그램을 추가 하는 방법은 다음과 같습니다.
/etc/inittab의 끝 부분에 다음과 같이 사용하면 됩니다.
===[/etc/inittab]================================================
:
APP0:12345:respawn:/test/bin/testprogram debugging
===[/etc/inittab]================================================
inittab의 사용법에 대한것은 info inittab 으로 알아보기 바랍니다. 아마 아주 자세하게 설명하고 있읍니다. 배포판에 따라서 한글로 아주 자세하게 나옵니다.
위 예는 런레벨 12345일때 /test/bin/testprogram을 실행합니다. 만약에 이 프로그램이 어떤 원인이 있어서 죽었다면 다시 실행시켜 줍니다. 마지막에 있는 debugging은 프로그램 아규먼트로 전달되는 것입니다. 이 부분은 필요없으면 안쓰면 그만입니다. 단지 전달되는 예를 보여 준것이다. 만약에 한번만 실행될 필요가 있다면 respawn 대신에 once를 사용합니다. 런 레벨을 무시하고 부팅시에만 실행될 필요가 있다면 boot를 씁니다. respawn , once, boot는 프로그램의 종료를 기다리지 않고 다음을 진행합니다. 하지만 경우에 따라서는 프로그램이 실행되고 끝난후에 다음을 진행할 필요가 있습니다.
이때는 respawn 대신에 wait를 boot 대신에 bootwait를 사용합니다. 이렇게 좋은 방법이 있음에도 불구하고 본인은 이 방법을 잘 사용하지 않습니다. 왜?
respawn을 사용했는데 프로그램이 죽는 상황이 프로그램 시작 초기에 발생하면 부팅 초기에 (특히 개발단계에서) 죽어라 죽은 프로그램을 다시 실행하기 위해서 init 프로그램은 애씁니다.(보기에 안쓰러울 정도 입니다. ㅜㅜ). 이 경우라면 부팅시간이 무척 길어져서 콘솔 화면 보기 정말 더럽게 어렵습니다.
(당해봐야 압니다.) 아니면 wait 를 이용했을경우에는 아예 부팅 스크립트들이 진행되지 않기 때문에
콘솔 보기는 애초에 포기해야 합니다. ( 이런 상황에 닥지면 정말 귀찮죠.. ) 보통 임베디드 응용 프로그램은 하나만 수행하지 않습니다. 프로그래머의 취향에 따라 다르지만 본인이 경우는 그렇습니다. 여러 프로그램을 실행할때는 보통 시작 순서가 있을 수 있습니다. 또 프로그램이 죽더라도 다시 실행을 바로 수행하지 않을 필요가 있습니다. 그리고 특정 디렉토리로 이동해서 프로그램이 시작되어야 하는 경우도 많습니다. 이런 경우에 inittab으로는 대처가 되지 않습니다.
그..래..서
이런 저런 제약 조건 때문에 본인은 그 막강한 기능에 비해서 잘 사용하지 않습니다.
추가로~
NAME
inittab - 시스템 운영 시작에서 사용되는 init 프로세스의 처리 방법을 지정하고 있는 파일.
DESCRIPTION
inittab 파일은 시스템이 가동될 때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는 파일이다. (예를 들면, /etc/rc, gettys.. 등의 처리). init 프로세스는 다양한 runlevels을 구별해서 사용한다. 이 runlevels은 시스템의 부팅과 종료등에 사용된다. runlevels 값은 0-6이며, ondemand 위해 A, B, C 가 쓰인다. inittab 파일의 내용은 다음과 같은 형식을 취한다.
id:runlevels:action:process
`#'로 시작하는 문장은 주석으로 처리된다.
id
inittab 안에서의 각 항목들에 대한 식별자. 최대 4자리. (libc의 버전이 5.2.18보다 낮은 버전이나, a.out 라이브러리로 컴파일 했다면, 사용할 수 있는 최대 문자 갯수는 2개다.
주의: getty나 다른 로그인 프로세스의 사용에서는 id 필드에는 그 프로세스에서 사용하는 tty의 끝자리 숫자가 와야한다. 예를 들면, tty1은 1. 그렇지 않으면 바르게 작동되지 않을 수도 있다.
runlevels
진행할 runlevel 지정.
action
action 지정
process
실행할 프로세스 지정. 이 필드에 `+' 문자가 제일 앞에 오면, init는 그 처리과정에서 utmp, wtmp 처리를 하지 않게 한다. 이것은 gettys에서 스스로 utmp/wtmp를 처리할 경우 필요하다. 사용하는 gettys를 확인하기 바란다.
action에서 사용할 수 있는 값은 다음과 같다.
respawn
그 프로세스가 종료되면 항상 다시 시작하게 한다.(예, getty)
wait
지정한 runlevel이 되면 그 프로세스가 실행되고, init는 그 프로세스가 종료되기를 기다린다.
once
지정한 runlevel이 되면 한번만 그 프로세스를 실행한다.
boot
시스템 부팅 때에 그 프로세스를 실행한다. 이때는 runlevel 값이 무시된다.
bootwait
시스템 부팅 때에 그 프로세스가 실행되는데, 이때 init는 그 프로세스가 종료되기를 기다린다.(예, /etc/rc). 이때는 runlevel 값이 무시된다.
off
아무것도 아니다. 단지 id만 존재하는 것뿐.
ondemand
지정한 ondemand runlevel이 호출 될 때마다 그 프로세스를 실행한다. 하지만 runlevel 값은 바뀌지 않는다. (ondemand runlevel 값은 'a', 'b', 'c' 이다.)
initdefault
시스템 부팅 뒤에 실행될 runlevel을 지정한다. 만약 이 부분이 없으면, 어떤 runlevel로 실행할 것이지, 콘솔에서 물어본다. process 필드는 무시된다.
sysinit
시스템 부팅을 할 때에 그 프로세스가 실행된다. 이것은 boot, bootwait로 지정된 프로세스보다 먼저 실행된다. process 필드는 무시된다.
powerwait
init가 SIGPWR 시그날을 받았을 때 그 프로세스가 실행된다. SIGPWR은 전원 공급에 문제가 생겼을 때 발생하는 시그날이다. Init는 그 프로세스 작업이 끝날 때까지 아무 작업도 하지 않는다.
powerfail
powerwait와 같지만, init는 그 프로세스 작업이 끝나기를 기다리지 않는다.
powerokwait
init가 SIGPWR 시그날을 받았을 때 그 프로세스가 실행된다. OK라는 단어를 포함하고 있는 /etc/powerstatus 파일이 SIGPWR 시그날을 제공한다.
ctrlaltdel
init가 SIGINT 시그날을 받았을 때 그 프로세스가 실행된다. SIGINT는 시스템 콘솔에서 누군가가 CTRL-ALT-DEL 글쇠를 눌렀을 때 발생하는 시스날이다. 이것은 전형적으로 컴퓨터를 리부팅하거나, 단일 사용자 모드를 사용하기 위해서 사용된다.
kbrequest
콘솔 글쇠판에서 특별하게 지정된 글쇠가 눌려졌을 때, 발생하는 한 시그날을 init가 받았을 때, 그 프로세스를 실행한다.
이 부분에 대한 이야기는 아직 여기서 자세히 다루지는 못한다. 좀더 자세한 정보를 원하면 kbd-x.xx 팻키지의 문서들을 참고한다. (이 문서는 kbd-0.91 팻키지를 바탕으로 쓰여졌다.) 보통, 글쇠지정은 "Spawn_Console" action으로 한다. 예를 들어, Alt-윗화살표글쇠를 지정하고 싶으면, 글쇠지정파일(keymap)에 다음 내용을 추가한다.
alt keycode 103 = Spawn_Console
하나의 프로세스가 각각 다른 runlevel에서도 같이 실행되게 하려면, runlevel 필드에는 다른 runlevel 들을 함께 지정할 수 있다. 예, 123. ondemand 값으로 지정한는 A, B, C도 마찬가지다. action 값이 sysinit, boot, bootwait로 지정되어 있으면 그 runlevel 값은 무시된다.
runleve 값이 바뀌었을 때, 그 새로 바뀐 runlevel에 대한 처리 과정을 따로 지정하지않았다면, SIGTERM, SIGKILL과 함께, 그 프로세스는 종료된다.
EXAMPLES
이것은 옛날 linux에서 사용하던 inittab 파일이다.
# inittab for linux
id:1:initdefault:
rc::bootwait:/etc/rc
1:1:respawn:/etc/getty 9600 tty1
2:1:respawn:/etc/getty 9600 tty2
3:1:respawn:/etc/getty 9600 tty3
4:1:respawn:/etc/getty 9600 tty4
이 파일은 시스템이 부팅되는 동안 /etc/rc 파일을 실행하고, tty1-tty4에서 getty를 실행한다.
다음 부분은 다른 runlevel에서의 각 설정들을 지정한다(주석 부분을 참고).
# 2 단계 정의
id:2:initdefault:
# 최우선으로 시스템 초기화
si::sysinit:/etc/rc.d/bcheckrc
# runlevel 0,6은 각각 halt와 reboot, 1은 단일 사용자 모드
l0:0:wait:/etc/rc.d/rc.halt
l1:1:wait:/etc/rc.d/rc.single
l2:2345:wait:/etc/rc.d/rc.multi
l6:6:wait:/etc/rc.d/rc.reboot
# "3 finger salute"에서 어떻게....
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
# runlevel 2&3: 콘솔 getty, level 3: 모뎀 getty
1:23:respawn:/sbin/getty tty1 VC linux
2:23:respawn:/sbin/getty tty2 VC linux
3:23:respawn:/sbin/getty tty3 VC linux
4:23:respawn:/sbin/getty tty4 VC linux
S2:3:respawn:/sbin/uugetty ttyS2 M19200
FILES
/etc/inittab
AUTHOR


댓글 없음:
댓글 쓰기