[질문] 데몬 프로그램이 죽으면 재시작 하는 감시 프로그램은 어
글쓴이: 익명 사용자 / 작성시간: 월, 2002/12/09 - 9:09오후
리눅스에서 소켓 리슨 서버 프로그램을 데몬으로 만들었습니다.
그렇지는 않겠지만 만약을 위해서 프로그램이 죽었을 때 재시작 하기위해
서 감시프로그램을 역시 C로 데몬으로 만들려고 합니다. 즉, 프로세스 매
니저(?)를 만들려고 하는데 proc을 이용한다는 정도만 찾았는데..
어디서부터 어떻게 시작해야 할지 잘 모르겠습니다. 구체적으로 예를 들어
서 설명을 해 주시면 고맙겠습니다.
참고할 만한 사이트나 문서도 알려 주시면 고맙겠습니다.
그럼 즐거운 하루 되시길..
감사합니다.
Forums:
Re: [질문] 데몬 프로그램이 죽으면 재시작 하는 감시 프로그램
1. 일반 소켓 프로그램
2. 1번을 감시하는 데몬(죽으면 다시 살려주거나 어떤 일을 하는...)
이럴 경우 2번을 /etc/inittab 에 등록해놓으시면 어떨까요.? 2번은 절대
죽지 않고(죽으면 바로 바로 다시 살아 나고) 1번을 감시하는겁니다.
Re^2: [질문] 데몬 프로그램이 죽으면 재시작 하는 감시 프로그
a.out이란 실행파일이 있을때 등록을 어떻게 하는지요??
좋은하루 되시고..
감사합니다.
Re^3: [질문] 데몬 프로그램이 죽으면 재시작 하는 감시 프로그
제가 inittab 파일 멘 페이지를 캡쳐해서 올려 드립니다. 자세히(사실 자세히랄것도 없지만) 읽어 보시면 어떻
게 사용하시는지 아실수 있을겁니다. 제가 만약 a.out 이라는 프로그램을 등록 하실려면 respawn을 이용하시면
됩니다.
# Run gettys in standard runlevels
12345respawn/sbin/mingetty tty1
22345respawn/sbin/mingetty tty2
32345respawn/sbin/mingetty tty3
42345respawn/sbin/mingetty tty4
52345respawn/sbin/mingetty tty5
62345respawn/sbin/mingetty tty6
72345respawn/etc/a.out <--- 이렇게요.
7(고유번호)2345(run level, 일반 멀티 TEXT 환경이면 3번 X WIN 환경이면 5번)respawn(맨날 재실행)파일 위
치
INITTAB(5) Linux System Administrator's Manual INITTAB(5)
NAME
inittab - 시스템 운영 시작에서 사용되는 init 프로세스의 처리 방법을 지정하고 있는
파일.
DESCRIPTION
inittab 파일은 시스템이 가동될 때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는
파일이다. (예를 들면, /etc/rc, gettys.. 등의 처리). init 프로세스는 다양한 run-
levels을 구별해서 사용한다. 이 runlevels은 시스템의 부팅과 종료등에 사용된다. run-
levels 값은 0-6이며, ondemand 위해 A, B, C 가 쓰인다. inittab 파일의 내용은 다음과
같은 형식을 취한다.
idrunlevelsactionprocess
`#'로 시작하는 문장은 주석으로 처리된다.
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이 호출 될 때마다 그 프로세스를 실행한다. 하지만 run-
level 값은 바뀌지 않는다. (ondemand runlevel 값은 'a', 'b', 'c' 이다.)
initdefault
시스템 부팅 뒤에 실행될 runlevel을 지정한다. 만약 이 부분이 없으면, 어떤 run-
level로 실행할 것이지, 콘솔에서 물어본다. 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
id1initdefault
rcbootwait/etc/rc
11respawn/etc/getty 9600 tty1
21respawn/etc/getty 9600 tty2
31respawn/etc/getty 9600 tty3
41respawn/etc/getty 9600 tty4
# 최우선으로 시스템 초기화
sisysinit/etc/rc.d/bcheckrc
# runlevel 0,6은 각각 halt와 reboot, 1은 단일 사용자 모드
l00wait/etc/rc.d/rc.halt
l11wait/etc/rc.d/rc.single
l22345wait/etc/rc.d/rc.multi
l66wait/etc/rc.d/rc.reboot
# "3 finger salute"에서 어떻게....
cactrlaltdel/sbin/shutdown -t5 -rf now
# runlevel 2&3 콘솔 getty, level 3 모뎀 getty
123respawn/sbin/getty tty1 VC linux
223respawn/sbin/getty tty2 VC linux
323respawn/sbin/getty tty3 VC linux
423respawn/sbin/getty tty4 VC linux
S23respawn/sbin/uugetty ttyS2 M19200
FILES
/etc/inittab
AUTHOR
Init was written by Miquel van Smoorenburg (miquels@cistron.nl), the manual page was
written by Sebastian Lederer (lederer@francium.informatik.uni-bonn.de) and modified
by Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).
SEE ALSO
init(8), telinit(8)
댓글 달기