Linux下打造Apache和Memcache守护进程

睡梦中,被电话惊醒,web服务器挂了,恼火坏了。登陆服务器一阵忙活,发现apache服务器和memcache服务器非法关闭了。哎,为了睡得安稳,抓紧写个小脚本来监控下appach和memcache吧!很快就有了下面的脚本:
  1. #!/bin/bash -  
  2.   
  3. name=`basename $0 .sh`  
  4. function showHelp(){  
  5.         echo "Usage: $name"  
  6.         echo "       $name test|dev"  
  7.         exit 1  
  8. }  
  9. if [ $# -ne 0 -a $# -ne 1 ]; then  
  10.         showHelp  
  11. fi  
  12. #正式/测试环境  
  13. test=0  
  14.   
  15. if [ $# -eq 1 ]; then  
  16. #       echo "$1"  
  17.         if [ "$1" = "dev"  -o "$1" = "test" ]; then  
  18.                 test=1  
  19.         else  
  20.                 showHelp  
  21.         fi  
  22. fi  
  23.   
  24. #echo $test  
  25.   
  26. websrvkey=/bin/httpd  
  27. websrvbin=/etc/init.d/apachectl  
  28. cachekey=/memcached  
  29. cachebin=/usr/local/memcached/bin/memcached  
  30. cachepid=/usr/local/memcached/memcached.pid  
  31. cachedir=/usr/local/memcached  
  32.   
  33.   
  34. #run web server  
  35. function startweb(){  
  36.         echo "`date` start websrv..."  
  37.         if [ ! -f $websrvbin ]; then  
  38.                 echo "`date` websrv bin [$websrvbin] not exist..."  
  39.                 return  
  40.         fi  
  41.         $websrvbin start  
  42.         echo "`date` start websrv complete..."  
  43. }  
  44.   
  45.   
  46. #run cache  
  47. function startcache(){  
  48.         echo "`date` start cache..."  
  49.   
  50.         if [ $test -eq 1 ]; then  
  51.                 cachebin=/usr/bin/memcached  
  52.         fi  
  53.   
  54.         if [ ! -f $cachebin ]; then  
  55.                 echo "`date` cache bin [$cachebin] not exist..."  
  56.                 return  
  57.         fi  
  58.   
  59.         if [ ! -d $cachedir ]; then  
  60.                 echo "`date` cache dir  not exist..."  
  61.                 mkdir $cachedir  
  62.                 echo "`date` create dir $cachedir"  
  63.         fi  
  64.   
  65.         if [ $test -eq 0 ]; then  
  66.                 $cachebin -d -m 100 -uroot -l 0.0.0.0 -p 11000 -c 512 -P $cachepid  
  67.         else  
  68.                 $cachebin -d -m 128 -l 192.168.119.60 -p 12000 -u ossh  
  69.         fi  
  70.         echo "`date` start cache complete..."  
  71. }  
  72. cnt=`ps -ef | grep $websrvkey | grep -vc grep`  
  73. # echo $cnt  
  74. if [ $cnt -le 0 ]; then  
  75.         startweb  
  76. fi  
  77. cnt=`ps -ef | grep /memcached | grep -vc grep`  
  78. #echo $cnt  
  79. if [ $cnt -le 0  ]; then  
  80.         startcache  
  81. fi  

把上面的脚本保存为monitorWebSrv.sh,并对该文件赋予可执行权限,进行如下操作:

  1. chmod +x  /etc/app/slightphp/public/csevent/bin/crontab/monitorWebSrv.sh  
然后加入crontab计划任务,如下:
  1. * * * * * /etc/app/slightphp/public/csevent/bin/crontab/monitorWebSrv.sh >> /tmp/monitorWebSrv.log  
  2. * * * * * sleep 30; /etc/app/slightphp/public/csevent/bin/crontab/monitorWebSrv.sh >> /tmp/monitorWebSrv.log  

为什么加两条呢?为了每隔30秒执行一次!

对于shell和crontab,请参阅以前的blog:shell脚本比较运算符及逻辑运算符小结 、Linux Shell脚本逻辑操作符简介 及Linux crontab命令小结。