[질문] 데몬 프로그램이 죽으면 재시작 하는 감시 프로그램은 어

익명 사용자의 이미지

리눅스에서 소켓 리슨 서버 프로그램을 데몬으로 만들었습니다.
그렇지는 않겠지만 만약을 위해서 프로그램이 죽었을 때 재시작 하기위해
서 감시프로그램을 역시 C로 데몬으로 만들려고 합니다. 즉, 프로세스 매
니저(?)를 만들려고 하는데 proc을 이용한다는 정도만 찾았는데..

어디서부터 어떻게 시작해야 할지 잘 모르겠습니다. 구체적으로 예를 들어
서 설명을 해 주시면 고맙겠습니다.

참고할 만한 사이트나 문서도 알려 주시면 고맙겠습니다.

그럼 즐거운 하루 되시길..

감사합니다.

익명 사용자의 이미지


1. 일반 소켓 프로그램
2. 1번을 감시하는 데몬(죽으면 다시 살려주거나 어떤 일을 하는...)

이럴 경우 2번을 /etc/inittab 에 등록해놓으시면 어떨까요.? 2번은 절대
죽지 않고(죽으면 바로 바로 다시 살아 나고) 1번을 감시하는겁니다.

익명 사용자의 이미지

a.out이란 실행파일이 있을때 등록을 어떻게 하는지요??

좋은하루 되시고..

감사합니다.

익명 사용자의 이미지

제가 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)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.