cron에서 bash로된 쉘을 실행시킬때.. 좀비가 되는경우가 있습니

rokmn3309의 이미지

안녕하세요..

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

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.