죽더라도 다시살리는 프로세스 만들기
글쓴이: hbsnow / 작성시간: 수, 2004/02/04 - 5:22오후
띄워놓은 프로세스가 죽지 않기를 바라는 마음은 프로그래머라면 공통적인 생각인것 같습니다.
게시판을 검색을 해보니 그 어떤 글보다도 많은 글이 올라와 있네요
대략 정리를 해보면
1. 쉘로 구성하는 방법
2. 프로그램으로 처리하는 방법
3. 쉘과 프로그램을 병행하는 방법
각자 처리하는 형태나 방법이나 쉘도 다 다른것 같은데요
쉽고 그리고 안정성을 가지는 방법은 어떤게 있을까 궁금해서 올려봅니다.
가능하면 간략한 코드를 올려주시면 감사하겠습니다.
한가지더 inittab를 통해 init로 관리를 하다면 프로세스를 강제로 죽인후 얼마나 있으면 프로세스가 다시 올라올까요?
Forums:
Re: 죽더라도 다시살리는 프로세스 만들기
저의 짧은 지식으로 볼때는 daemontools라는 것의 기능 같습니다만..
Re: 죽더라도 다시살리는 프로세스 만들기
http://people.kldp.org/~eunjea/daemontools.html
daemontools 간결하고 좋습니다.
daemontools를 쉽게 사용하도록 도와주는 스크립트인 supervise-scripts도 좋습니다.
http://untroubled.org/supervise-scripts/
간단하게 /etc/inittab 에 respawn형식으로 등록해도 됩니다
간단하게 /etc/inittab 에 respawn형식으로 등록해도 됩니다. :)
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
[quote="ganadist"]간단하게 /etc/inittab 에 re
daemontools 도 inittab 에 respawn 형식으로 등록됩니다.
이런 형식으로 등록됩니다.
로그관리나 기타 제반적인 것들을 daemontools가 해주니 그런것에 신경을 안써도 된다는 것이 좋은 것이겠죠... :D
음..
다운로드 링크가 안 걸리는군요
http://cr.yp.to/daemontools/install.html
여긴걸리네요
inittab 재시작 시간을 재보니..
init는 대략
5분이네요!
Re: 음..
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
linux 지원합니다. rpm 도 있습니다.
redhat 9
http://summersoft.fay.ar.us/pub/qmail/daemontools/redhat-9/daemontools-0.76-2.i386.rpm
http://summersoft.fay.ar.us/pub/qmail/daemontools/redhat-9/daemontools-0.76-2.src.rpm
redhat
http://summersoft.fay.ar.us/pub/qmail/daemontools/redhat/daemontools-0.76-1.i386.rpm
http://summersoft.fay.ar.us/pub/qmail/daemontools/redhat/daemontools-0.76-1.src.rpm
Re: inittab 재시작 시간을 재보니..
http://people.kldp.org/~eunjea/daemontools/svscan.html
svscan은 매 5초마다 하위 디렉토리를 확인하여, 만약 새로운 하위 디렉토리를 발견하면, 새로운 supervise 프로세스를 시작한다. 만약 supervise가 종료된 이전 하위 디렉토리를 발견하면, supervise 프로세스를 재시작한다. log의 경우 동일한 파이프를 재 사용하게 되므로 데이터를 잃지 않는다.
설정을 햇는데..
리눅스에 0.76.tar.gz을 설정을 했는데..
/etc/inittab에
SV:123456:respawn:/command/svscanboot
이거가 추가됬고
ps -ef로 보니 떠 있기는 한데..
root 6541 1 0 04:48 ? 00:00:00 /bin/sh /command/svscanboot
root 6543 6541 0 04:48 ? 00:00:00 svscan /service
root 6544 6541 0 04:48 ? 00:00:00 readproctitle service errors: ...............................................
도데체 아무런 뭐가 없네요?
/usr/local/bin에서 실행시킨 프로세스를 죽여도 다시 살지도 않고...
재부팅을 해야 하나?
하위디렉토리는 /services에 생기기 않나요?
이상하다!
Re: 설정을 햇는데..
/services 디렉토리는 사용자가 원하는대로 서비스를 넣는 것입니다.
daemontools는 그냥 감시만하죠..
/servcies 아래 원하시는 프로그램을 daemontools 형식에 맞게끔 작성해서 (run파일) 넣으시면 자동으로 실행될 겁니다.
http://people.kldp.org/~eunjea/daemontools/faq.html
저의 경우엔 실제 script들은 /var/services 이런곳에다 넣어두고 서비스로 등록할때는 /services 에 심볼릭 링크해 둡니다.
잠시 stop 시킬때는 down 이라는 파일을 touch 해두고요..
물론 이런 삽질은 supervise-scripts를 이용해서 해결하고요..
supervise-scripts
daemontools 시작하는 방법이 꽤 까다롭네요.. 나만 그런가..
위에 문서를 보았는데.. 좀 어렵네요!
그리고 svscanboot 쉘에 보니 PATH=/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
이렇게 되어잇는데 이건 뭘 말하는건가요?
daemontools 서비스를 받을려면 /services에 꼭 등록을 해야 하나요? 그리고 등록은 어떻게 하죠?
어제 밤을 좀 샜더니 머리가 안도네요! 도움을 부탁합니다.
그리고 supervise-scripts 은 다운 받았은데요
문서에 보니 make install-config를 하면 된다는데 이게 없네요!
Re: supervise-scripts
사실 익숙하지 않다면 복잡해 보이기만 하겠죠..
가장 간단한 스크립트 작성법이
http://people.kldp.org/~eunjea/clockspeed.php
위의 페이지를 참조해 보시면 맨 밑에 나와 있습니다..
단순하게 path를 걸고.. exec 프로그램 하는 것으로 끝.. 이라는..
참조하시기 바랍니다.
그렇게 했는데요
/service/ $ ls -lt
lrwxrwxrwx 1 root root 18 Feb 5 14:35 hdns -> /var/service/hdns/
$ ps -ef|grep hdns
root 18400 957 0 14:35 ? 00:00:00 supervise hdns
$ ps -ef
.
.
.
root 18865 18400 0 14:43 ? 00:00:00 [supervise defunct>]
이러면 된건가요?
근데 실질적인 프로그램이 떠있지를 않네요!
네트웍 포트도 안 열려 있고.. (netstat -a)
???
데몬쓰면됩니다.
리눅스에서 필수커널데몬들이 inetd 슈퍼데몬의 관리를 받는
매커니즘을 사용하시는게 바람직할듯 싶습니다.
개략적인 구조를 말씀드리면.
proclist파일에: 관리할 프로세스들을 적어두시고요.
procDaemon: process를 관리할 데몬p.
일정주기(cron을 사용할수도있고요)로
proclist에 등록되어있는 프로세스들이 잘 돌고있나 체크하고
실행중인 프로세스목록에 없으면 실행시켜주면됩니다.
모든 디지털의 목표는 아날로그.
플밍이 가능하시다면..걍 fork하시고 child는 exec..
플밍이 가능하시다면..
걍 fork하시고 child는 exec.. parant는 wait...
child 죽으면 연락(?) 오니까.. 바로 다시 fork후 exec....
생각보다 쓸만합니다.. ^^;
단, fork 해 주는 넘이 죽으면 대략 난감... 이겠죠? ㅋㅋ
저두요...플밍이 가능하시다면 위엣분 말대루 하시고fork 해주는 놈
저두요...플밍이 가능하시다면 위엣분 말대루 하시고
fork 해주는 놈을 inttab에 등록시켜주는 게 좋을꺼 같숩니다.
댓글 달기