시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
bash파일을 클론으로 실행시 좀비가 되는경우.

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX 일반
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
rokmn3309
손님





올리기올려짐: 2004.12.13 월, 1:41 pm    주제: bash파일을 클론으로 실행시 좀비가 되는경우. 인용과 함께 답변

안녕하세요..

2.x에 쓰레드로 돌리고 있는 아파치에서 특정시점에 Segmentation fault가 발생하여 서버가 먹통이 되는경우가 종종 있어서
crontab에서 2분마다.. http서버가 응답을 하는지 expect로 telnet으로 통신을 해보고 문제가 있을시에 다시 아파치를
재시작하는 expect를 실행후 메일을 보내주는 쉘을 실행하고 있습니다.

문제는 평상시 체킹하는것 까지는 별 문제가 없이 잘되는데 문제가 생겨서 아파치를 재시작하는 쉘을 실행후 좀비가 되어버리는
문제가 있습니다.

전체적인 루틴은 "클론에서 관리쉘을 호출하면 웹통신체크후 통신이 안돼면 아파치 재시작후 메일을 보내고 종료" 입니다.


다음코드가 클론에서 호출하는 쉘입니다.
코드:

#http_control.sh
#!/bin/bash

checkdomain="127.0.0.1"
notifyMailaddr="aaa@bbb.com"

serverip=`hostname -i`
servername=`hostname`
serverdate=`date +%Y-%m-%d`
servertime=`date +%H:%M:%S`

mailsubject="[SERVERINFO]-"$servername
mailcontent="HTTP Restart Time: $serverdate $servertime and Server $servername ( $serverip )"

getMsg=`/script/http_live_check.sh $checkdomain` # 아파치 응답여부
getMsgLen=${#getMsg}
domsg=${getMsg:$getMsgLen-5:$getMsgLen}

if [ "$domsg" != "alive" ]
then
     # 문제가 발생시에 아파치를 재시작하고 관리자에게 메일 전송
      /script/auto_http_restart.sh &
     #/script/auto_http_restart.sh
     sleep 1

     mailhead="$notifyMailaddr -s '$mailsubject'"
     echo $mailcontent | mail $mailhead
     exit 0
fi


다음은 텔넷으로 웹서버가 응답하는지 통신하는 쉘입니다.
코드:

#http_live_check.sh
#!/usr/bin/expect

set host [lindex $argv 0]
set port 80
spawn telnet $host $port

set timeout 5
expect {
    "Escape character is" {
        send "HEAD / HTTP/1.0\n\n";
    }
    "Connection refused" {
        send_user "http death"
        exit 2
    }
    "Unknown" {
        send_user "http death"
        exit 2
    }
    timeout {
        send_user "http death";
        exit 2
    }
}

# port is opened! now check response is good.
set timeout 10
expect {
    "HTTP/1.1" {
        send_user "http alive"
    }
    "Connection closed" {
        send_user "http death";
    }
    timeout {
        send_user "http death";
        exit 1
    }
}


다음은 아파치를 재시작하는 쉘입니다. 웹에서 ssl을 사용 해야해서 아파치에서 자동으로 패스워드를
인식하게 했는데 2.x 대로 업후에 인식이 안되어서 쉘에서 자동으로 넣게 만든것입니다.
코드:

#auto_http_restart.sh
#!/usr/bin/expect

set myPath "/data/local/apache-2.0.49/bin/apachectl"
set myCmd "$myPath stop"
spawn bash -c $myCmd
sleep 1

set myCmd "$myPath startssl"

while 1 {
        spawn bash -c $myCmd
        expect {
                "*already running" {
                        set myCmd "$myPath stop"
                        sleep 1
                }
                "*not running" {
                        set myCmd "$myPath startssl"
                        sleep 1
                }
                "Enter pass phrase:" {
                        send "mypassword\r"
                        sleep 1
                        expect "Ok: Pass Phrase Dialog successful."
                                interact
                                exit 0
                }
                default {
                        set myCmd "$myPath startssl"
                        sleep 1
                }
        }
}

interact
exit 0


다음은 클론탭에서 해당 부분입니다.
코드:

# apache web daemon responsable check
*/2 * * * * root /script/http_control.sh &
#*/2 * * * * root /script/http_control.sh
위로
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2004.12.17 금, 9:20 am    주제: Re: bash파일을 클론으로 실행시 좀비가 되는경우. 인용과 함께 답변

어떤 프로세스가 좀비가 되는지.

그리고, 그 전 단계에 apache가 왜 segment fault가 나는지 부터 파악하는게 나을 것 같습니다.
컴파일이 잘 못 된 것은 없는지, 다른 에러 메시지는 없었는지 등등을 파악하는게.
ltrace같은 걸로 프로세스에서 이뤄지는 call 상태도 파악해보시구요.

웹서버 동작중인지 아닌지 체크는
ab (아파치내), HEAD (perl-libwww-perl 패키지) 등으로 체크하는게 더 편하겠네요.
아니면 php로 간단히 포트 체크하도록 하시던지요.

코드:

$ServPort = "80";
$fp = @fsockopen ($ServAddr, $ServPort, $errno, $errstr, 10);
echo "[접속중  ] $ServAddr:$ServPort \n";

// 포트가 열리지 않았다면
if (!$fp) {             
        return "0";
}
fclose ($fp);
return "1";
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX 일반 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group