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초간 쉬어 서버의 부하를 덜어주면서 스크립트가 계속 실행될 수 있게 되었다.
반응형
'Scripts' 카테고리의 다른 글
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in (0) | 2013.06.19 |
---|---|
파일 존재 유무를 확인하는 쉘스크립트 (0) | 2011.07.04 |
ASP Cint 오버플로 (0) | 2011.06.29 |
PHP 버전 차이로 변수값을 못 받을때 (0) | 2011.04.12 |
shell 아파치 시작 프로그램 (0) | 2011.03.04 |