|
커피향이 나는 *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";
|
|
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 있습니다 답글을 올릴 수 있습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB © 2001, 2005 phpBB Group
|