블로그 이미지
Rootrator
1개를 알면 모르는 10개가 튀어나온다..!

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2011. 3. 3. 11:19 Scripts

출처 : linux.co.kr

while ( true ) ; do
  if [ "`pgrep -x httpd | wc -l`" -ge "500" ] ; then
    /usr/local/apache/bin/apachectl restart
  fi   
  sleep 1
done

하나하나씩 살펴보자

while문은 어느 조건을 만족할때까지 계속적으로 실행되는 반복문이다.

그럼 그것이 어떤 조건이냐 함은

pgrep -x httpd | wc -l 이 500 이하일때, 즉 현재 서버에서 돌아가는 httpd 프로세스의 갯수가 500개

이하일때를 뜻한다.


httpd 갯수를 구하는 명령어를 살펴보자.

ps -e는 서버에서 돌아가는 프로세스 전체를 보여준다.

ps -e | grep -w httpd  여기서 -w는 단위단어 검색이다. 즉, https 같은 단어는 검색되지 않는다.

여기서 해당 줄을 카운트하는 명령어만 써주면 완성이다.

ps -ed | grep -w httpd | wc -l

이걸 더 간단화 시키면

pgrep -x httpd | wc -l

pgrep은 httpd 프로세스의 pid를 얻기 위해 쓰이는 명령어이다.

여기까지가 프로세스 갯수를 구하는 명령어..


다음으로 아파치를 재시작하는 명령어이다.

간단히 service httpd restart 하거나 /usr/local/bin/apachectl restart로 할 수 있으나,

간혹가다 죽지않고 뻐팅기는 프로세스가 있어서 시작이 안되는 경우가 있다.

이럴때는 강제로 프로세스를 죽이는 방법이 있다.

pgrep -x httpd | xargs kill -9

xargs는 앞에 pgrep에서 얻은 인자를 뒤의 kill -9의 인자로 넘겨주겠다는 명령어다.

이렇게되면 httpd 프로세스가 몇백개를 넘겨도 다 죽일수 있다.

자 이렇게 완성된 명령어로 아파치 재시작 프로세스가 완성되었는데.

sleep 1을 넣어 1초간 쉬어 서버의 부하를 덜어주면서 스크립트가 계속 실행될 수 있게 되었다.




반응형
posted by Rootrator