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

쉘프로그래밍강좌071 : N초마다 한번씩 지속적으로 자동실행하는 쉘스크립트

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

쉘프로그래밍강좌071 : N초마다 한번씩 지속적으로 자동실행하는 쉘스크립트


 

부제 : 20초 주기로 쉘스크립트 자동실행을 위한 sleep명령어 사용 예

 

 

 

 

아래는 sleep의 적당한 예를 들기 위하여  간단히 만들어본  쉘스크립트입니다.

 

 

 

이 쉘스크립트는 서버내의 부하율(Load  Average)을 계산하여 지정한 부하율을 넘게 되면 아파치와 Mysql을 모두 종료시키고 다시 시작시키는 일종의 서버부하율을 조정하는 쉘스크립트입니다.

 

 

 

 특정 CGI나 프로그램이 서버자원을 독점하는 것을 일시적으로 해결하기 위한 응급조치용으로 제작한 것이므로 완벽하지는 않습니다.

 

 

 

 

또한 이 쉘스크립트는 Bash SHELL이 아닌 C SHELL버전으로 만든 것이며 실행시에는 백그라운드로 실행을 하셔야 합니다.

 

 

 

 

 

그리고 이 쉘스크립트는 한번 실행되면 20초에 한번씩 자동실행이 됩니다.

 

 

 

 그 이유는 이 쉘스크립트의 아래쪽에 설정되어 있는 “sleep 20s”때문입니다.

 

 

 

 

 

#!/bin/csh

# name of this program : PROCH

# creator : 수퍼유저(www.linux.kr) PARK SUNG SOO

# Email : papa@superuser.co.kr

 

set t = 1

while (t != 0)

uptime

echo "#########  `date`  ##########"

set uptime_variable = (`uptime`)

@ a = $#uptime_variable - 2

 

set uptime_count = (`uptime | awk '{print $'$a'}' | awk -F. '{print $1}'`)

set httpd_count = (`ps -ef | grep httpd | wc -l`)

set mysql_count = (`ps -ef | grep mysqld | wc -l`)

 

echo "System Load Average => $uptime_count"

echo "Apache process count => $httpd_count"

echo "Mysql process count => $mysql_count"

 

if ($uptime_count > 30 || $httpd_count > 300 || $httpd_count < 8 || $mysql_count < 3) then

   echo "Application Restarted...Now...."

 

   ps -ef | grep httpd | awk '{print $2}' | xargs kill -9

   ps -ef | grep mysql | awk '{print $2}' | xargs kill -9

 

   /usr/local/apache/bin/apachectl start

   /usr/local/mysql/bin/safe_mysqld -O max_connections=10000 -O table_cache=256 -O wait_timeout=100 &

 

endif

 

sleep 20s

 

end

 

 

 

 

즉 위의 쉘스크립트의 전체내용은 “while ~ end”문으로 되어 있으며 한번 실행이 되면 while루프문 내의 명령어들이 차례대로 반복실행이 됩니다.

 

 

 

  이때 20초마다 한번씩 반복되도록 하기 위하여 “sleep 20s”라는 명령문을 사용한 것입니다.

 

 

 

 

 

위의 쉘스크립트를 예로든 이유는 실제로 쉘스크립트내에서 sleep명령어가 어떻게 사용되고 있는가를 보여드리기 위함입니다.

 

 

 

 

 

거듭 말씀 드리지만 위의 쉘스크립트는 필자가 응급조치용으로 만든 것으로 실무사용은 자제해 주시기 바라며 실무에서 꼭 사용을 하시고자 한다면 충분한 검토를 하신 후에 사용하시기 바랍니다.

 

 

 

 

 

 

 

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  132 명