6. 아파치 죽었을 때 자동으로 살려주는 쉘프로그램 제작하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,635 조회
- 0 추천
-
목록
본문
6. 아파치 죽었을 때 자동으로 살려주는 쉘프로그램 제작하기
다음은 앞의 logger쉘프로그램의 변형으로서 while반복문을 이용하여 실무에서 사용할 수 있는 간단한 쉘프로그램을 만들어 보도록 하겠습니다. 가능한 간단히 만들려고 노력하였습니다. 이 쉘프로그램을 실무에 적용하실 때에는 여러분의 서버환경에 잘 맞는지 확인하신 후에 적용하시기 바랍니다.
이 프로그램은 필자가 while문의 설명을 위하여 짧은 시간에 만든것으로 간단히 요약하면 다음과 같습니다. 이 쉘프로그램을 참고하시면 여러분들도 서버관리에 필요한 간단한 쉘프로그램은 직접 만들어 사용하실 수 있을 것이라 생각합니다.
1. 쉘프로그램명(가칭) : 아파치모니터V0.1
2. 프로그램실행방법 : ./while02.sh & (백그라운드로 실행시켜둔다.)
3. 실행권한 : 일반적으로 root권한으로 실행한다.
4. 작동방식 : 한번 실행해 두면 서버가 종료될 때까지 계속 실행되어 있다.
10초에 한번씩 계속해서 아파치 웹데몬 httpd가 실행되어 있는가를 점검한다.
만약 아파치 웹데몬 httpd가 죽어있다면 아파치를 재시작한다.
아파치 웹데몬 httpd가 살아있으면 재시작하지 않고 점검만 한다.
이 쉘프로그램의 소스를 보면 다음과 같습니다.
[root@command root]# cat while02.sh #!/bin/bash
while (:) do
httpdcount=`ps -ef | grep httpd | wc -l`
if [ $httpdcount -le "1" ]
then
echo "Apache is restarted." echo $httpdcount
/usr/local/apache2/bin/apachectl restart
fi
sleep 10
done [root@command root]# |
이 쉘프로그램을 설명하면 다음과 같습니다.
while (:)
이 쉘프로그램은 백그라운드로 지속적으로 실행될 것이기 때문에 while문을 이용하여 무한루프를 돌립니다.
do ~ done
쉘프로그램의 실행될 내용들 입니다. 즉, 무한루프되는 while문의 실행문 본체입니다.
httpdcount=`ps -ef | grep httpd | wc -l`
아파치 웹데몬 httpd의 프로세스 개수를 체크하여 httpdcount라는 변수에 그 숫자를 저장합니다.
if [ $httpdcount -le "1" ]
아파치웹서버를 재시작할 조건을 체크하는 if문으로서 아파치웹데몬 httpd의 개수가 1과 같거나 1보다 작을 경우에 then이하의 명령문들이 실행됩니다. 즉, httpd의 개수가 1이거나 1보다 작다라는 의미는 웹데몬이 죽어있다라는 의미와 같습니다. 여기서 웹데몬이 죽었다는 조건에 1의 경우를 포함한 이유는 grep명령어를 사용하여 httpd를 점검하고 있기 때문에 실제로 httpd데몬이 하나도 존재하지 않을 경우에도 “grep httpd”프로세스 때문에 httpdcount값이 1이 될 수 있기 때문입니다. 또한 대부분의 아파치웹데몬이 정상적이라면 httpd데몬이 5개이상 실행이 되어있을 것이기 때문에 특별한 경우를 제외하고는 이 조건체크는 아파치웹데몬이 죽었는가 살았는가를 판정하는 기준이 될 수 있을 것입니다.
then
echo "Apache is restarted."
echo $httpdcount
/usr/local/apache2/bin/apachectl restart
sleep 10
fi
만약 if문에서 아파치 웹데몬이 죽었다고 판단이 될 때에 then과 fi사이의 명령문들이 실행됩니다. 즉, echo문으로 "Apache is restarted."메시지를 출력합니다.
그리고 “echo $httpdcount”에 의해 현재 아파치 웹데몬의 개수를 출력합니다.
그런 다음 죽어있는 아파치 웹데몬을 살리기 위하여 “/usr/local/apache2/bin/apachectl restart”을 실행하여 아파치 웹서버를 재시작합니다. 만약 아직 APACHE 1.X버전을 사용하신다면 “/usr/local/apache/bin/apachectl restart”라고 하셔야합니다. 그리고 RPM으로 설치한 아파치웹서버를 사용하시는 분이라면 이 부분을 “/etc/rc.d/init.d/httpd restart”으로 바꾸어 주시기 바랍니다.
그리고 “sleep 10”이라는 것은 아파치 웹데몬의 점검 간격을 설정한 것으로 10초마다 한번씩 점검하기 위한 것입니다.
다음은 이 쉘프로그램을 직접 실행시킨 것입니다. 이 쉘프로그램은 백그라운드로 실행되므로 끝에 &를 주었습니다. 그리고 이 쉘프로그램의 실행을 관리자가 직접 죽이지 않는한 아파치 웹서버를 10초 간격으로 계속 점검하게 될 것입니다.
[root@command root]# ./while02.sh & [1] 13993 [root@command
root]# root 13993 17973 2 00:26 pts/0 00:00:01 /bin/bash ./while02.sh root 21101 17973 0 00:26 pts/0 00:00:00 grep while02 [root@command root]# |
다음은 이 쉘프로그램을 백그라운드로 실행킨 후에 다음과 같이 아파치웹데몬을 일부러 죽여보았습니다. 즉, “killall httpd”명령문으로 현재 실행되어 있는 모든 아파치데몬을 죽였습니다. 그런 결과 아래와 같이 자동으로 아파치 웹데몬이 재시작되고 있음을 알 수 있습니다.
[root@command root]# killall httpd [root@command root]# Apache is restarted. 1 Stopping httpd: [FAILED] Starting httpd: [ OK ]
[root@command root]# [root@command root]# killall httpd [root@command root]# Apache is restarted. 1 Stopping httpd: [FAILED] Starting httpd: [ OK ]
[root@command root]# |
즉, 실제로 아파치웹서버데몬(httpd)이 죽었다면 최소한 10초이내에는 자동재시작을 하게 된다는 것입니다.
이 쉘프로그램은 필자가 while문의 활용방법을 설명하기 위하여 짧은시간에 만든것이므로 실무적인 활용을 하시려면 반드시 적용여부를 확인하신 후에 사용하시기 바랍니다.
관련자료
-
이전
-
다음