강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

쉘프로그래밍강좌040: 아파치 웹서버 다운되었을 때 자동으로 되살리는 쉘프로그램 만들기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

쉘프로그래밍강좌040: 아파치 웹서버 다운되었을 때 자동으로 되살리는 쉘프로그램 만들기

 

 

 

 

 

다음은 while반복문을 이용하여 실무에서 사용할 수 있는 간단한 쉘프로그램을 만들어 보도록 하겠습니다.

 

 

 

 가능한 간단히 만들려고 노력하였습니다.

 

 

 

 이 쉘프로그램을 실무에 적용하실 때에는 여러분의 서버환경에 잘 맞는지 확인하신 후에 적용하시기 바랍니다.

 

 

 

 

 

이 프로그램은 필자가 while문의 설명을 위하여 짧은 시간에 만든 것으로 간단히 요약하면 다음과 같습니다.

 

 

 

 이 쉘프로그램을 참고하시면 여러분들도 서버관리에 필요한 간단한 쉘프로그램은 직접 만들어 사용하실 수 있을 것이라 생각합니다.

 

 

 

 

 

1.  쉘프로그램명(가칭) : 아파치모니터V0.1

 

 

2. 프로그램실행방법 : ./while02.sh &     (백그라운드로 실행시켜둔다.)

 

 

3. 실행권한 : 일반적으로 root권한으로 실행한다.

 

 

 

 

4. 작동방식 :

 

 

- 한번 실행해 두면 서버가 종료될 때까지 계속 실행되어 있다.

 

 

    - 10초에 한번씩 계속해서 아파치 프로세스 httpd가 실행되어 있는가를 점검한다.

 

 

    - 만약 아파치 웹데몬 httpd가 죽어있다면 아파치를 자동 재시작한다.

 

 

    - 아파치 웹데몬 httpd가 살아있으면 재시작하지 않고 점검만 한다.

 

 

 

이 쉘프로그램의 소스를 보면 다음과 같습니다.

 

 

 

 

 

[root@RockyLinux01 ~]# 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

 systemctl restart httpd

fi

 

sleep 10

 

done

[root@RockyLinux01 ~]#

 

이 쉘프로그램을 설명하면 다음과 같습니다.

 

 

 

 

 

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

systemctl restart httpd

fi

 

 

 

만약 if문에서 아파치 웹데몬이 죽었다고 판단이 될 때에 then fi사이의 명령문들이 실행됩니다.

 

 

 

 , echo문으로 "Apache is restarted."메시지를 출력합니다.

 

 

 

 

 

그리고 “echo $httpdcount”에 의해 현재 아파치 웹데몬의 개수를 출력합니다.

 

 

 

 

 

그런 다음 죽어있는 아파치 웹데몬을 살리기 위하여 “systemctl restart httpd”를 실행하여 아파치 웹서버를 재시작합니다.

 

 

 

 만약 아파치웹서버를 소스 컴파일하여 설치하셨다면 이 부분을 경로에 맞게 바꾸어 주시면 됩니다.

 

 

 

 

 

sleep 10

 

그리고 “sleep 10”이라는 것은 아파치 웹데몬의 점검 간격을 설정한 것으로 10초마다 한번씩 점검하기 위한 것입니다.

 

 

 

 

 

 

다음은 이 쉘프로그램을 실행시킨 것입니다.

 

 

 

 이 쉘프로그램은 백그라운드로 실행되므로 끝에 &를 주었습니다.

 

 

 

 그리고 이 쉘프로그램의 실행을 관리자가 직접 죽이지 않는 한 아파치 웹서버를 10초 간격으로 계속 점검하게 될 것입니다.

 

 

 

[root@RockyLinux01 ~]# ./while02.sh &

[1] 2216

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2067       1  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2070    2067  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2071    2067  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2072    2067  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2073    2067  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2074    2067  0 12:46 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

root        2224    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# killall httpd

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2235    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2237    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2239    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2241    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]# Apache is restarted.

1

 

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ps -ef | grep httpd

root        2249       1  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2251    2249  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2252    2249  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2253    2249  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2254    2249  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

apache      2255    2249  0 12:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

root        2298    1949  0 12:49 pts/0    00:00:00 grep --color=auto httpd

[root@RockyLinux01 ~]#

 

 

그리고 쉘프로그램을 백그라운드로 실행시킨 후에 다음과 같이 아파치웹데몬을 일부러 죽여보았습니다.

 

 

 

 , “killall httpd”명령문으로 현재 실행되어 있는 모든 아파치데몬을 죽였습니다.

 

 

 

그런다음 pshttpd를 계속 확인해보면  자동으로 아파치 웹데몬이 재시작되고 있음을 알 수 있습니다.

 

 

 

 

, 실제로 아파치웹서버데몬(httpd)이 죽었다면 최소한 10초 이내에는 자동재시작을 하게 된다는 것입니다.

 

 

 

 

 

이 쉘프로그램은 필자가 while문의 활용방법을 설명하기 위하여 짧은 시간에 만들 것이므로 실무적인 활용을 하시려면 반드시 적용여부를 확인하신 후에 사용하시기 바랍니다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  154 명