[스크립트] 프로그램이 살아있도록...
글쓴이: 탱탱 / 작성시간: 월, 2003/06/30 - 11:23오전
프로세스를 하나 띄웠는데
cron으로 1분간격으로 다운되었는지를 체크하여
다운되었으면 Up시키는 스크립트가 필요합니다
그런데 그 프로세스와 stdin, stdout으로 통신을 하기때문에
터미널이 필요해서 screen유틸을 사용하려고 합니다
screen세션 Number는 0번이라고 가정할 때
이걸 어떻게 해결해야 할까요??
쉽지가 않네요 ㅡㅡ;;
Forums:
아 참고로...screen유틸 옵션을 이용하여 다음과 같이 쓸수가 있
아 참고로...
screen유틸 옵션을 이용하여 다음과 같이 쓸수가 있습니다
screen -p(세션넘버) 0 -X exec /home/...(명령어)
로요
그런데 이 방법으로 돌리려면 또 스크립트를 불러야 되는데
(pwd문제가 해결아 안되더군요)
그렇게 되면 그 스크립트 하위의 프로세스로 들어가게 되는데
ㅡㅡ;; 어떻게 방법 없을까요
screen 0에 직접 attach할....
난 세상의 떨거집니다
더 알 필요가 있겠습니까? 나에 대해서??
http://www.linux.co.kr 에 올렸던 글입니다.여기도
http://www.linux.co.kr 에 올렸던 글입니다.
여기도 올려야 겠군요.
Script로 해도 좋지만 반응이 느려서
보다 빠른 반응을 원하신다면 밑의 예제소스를 컴파일 하여
만들어 보세요. 반응속도가 좋습니다.
다음은 무적 프로세스라는 이름으로 만들어본 겁니다.
일종의 버그를 무시하고 어떻게든지 Run상태로 유지해야 할 필요가 있는 프로세스들을
다음의 함수를 사용하여 죽어도 다시 살아나는 강자로 만드는 코드입니다.
사용법은 execvp 와 동일한 인자에 앞에 콜백하나 넣은거 뿐입니다.
즉, "ls -al"에 대한 것을 계속 반복하고 싶으면 다음과 같이 합니다.
char *s_Exec[] = {"ls", "-al", (char *)0 };
CORE_SoftwareWatchdog(NULL, s_Exec[0], s_Exec);
이렇게 호출하게 되면 ls -al 의 무한반복을 보시게 될겁니다.
이와 유사하게도 signal의 SIGCHLD 를 이용한 방법도 있다는 것을 힌트로 말씀드립니다.
signal을 사용하면 fork의 횟수를 줄일수 있지만 별로 향상된다는 것은 느껴지지 않아서
fork 3회를 통한 방법을 소개합니다. 중요한것은 두번째 fork의 부모프로세스가 즉시 exit되는점
그 외에 특별히 어려운 내용은 아닌듯 싶네요.
Lv I fork는 함수의 인자값을 분리하기 위한 Lv II를 준비하는 .....
Lv II fork의 목적은 호출지의 함수가 블럭되지 않도록 하는 것이고요...
Lv III fork가 실제 실행을 담당하는 것이라고 말할수 있겠군요.
또한 응용으로서 callback을 사용하면 process가 재시작하는 사이에 약간의 지연시간등을
넣을수 있겠죠?
그리고 PID를 검사해서 상태를 점검한다던지...
callback함수에서 getpid가 리턴하는 값은 실제 실행되는 프로세스의 pid가 되겠네요.
또한 fork에러가 발생한 경우 완전히 빠져나오도록 해야 하는데 그렇지 않으면 무한루프를
돌면서 엄청난 CPU점유를 가질수 있는 치명적인 경우가 발생할수 있기 때문이고요....
에러를 어느정도 무시하는데 띄워야 되는게 아니라프로세스와 통신할 콘솔
에러를 어느정도 무시하는데 띄워야 되는게 아니라
프로세스와 통신할 콘솔이 뜨기 때문에
그 콘솔의 아웃내용을 보고 디버깅을 하거나
DB를 업데이트해야 하기 때문에
screen유틸을 쓴다고 한 겁니다 ㅡㅡ;;
답변은 감사합니다만 내용이 좀 어긋났네요
난 세상의 떨거집니다
더 알 필요가 있겠습니까? 나에 대해서??
댓글 달기