注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

monitor.sh监控进程并重启拉起  

2014-11-16 22:08:29|  分类: 脚本/跳板/效率/ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://zhengdl126.iteye.com/blog/1449103

比如在服务器开启了php死循环程序,为了防止php进程僵死或挂掉,需要sh监控进程并重启拉起。

当日志记录时间超过5分钟就kill重启拉起

 

 

 

 

Php代码  收藏代码
  1. #!/bin/bash  
  2. #  
  3. # 请使用crontab -e 来输入命令每隔一定时间调用本程序  
  4. # */1 * * * * /bin/sh /var/www/<span style="color: #ff0000;">test</span>  
  5. /protected/commands/shell/monitor.sh  
  6. #  
  7. #日志文件  
  8. LOG_DATE=`date +%Y-%m-%d`  
  9. LOG_PATH="/var/www/logs/monitor_${LOG_DATE}.log"  
  10. run_php_path="/usr/local/php/bin/php"  
  11. <span style="color: #ff0000;"><strong>  
  12. if [[ $0 = \* ]]  
  13. then   
  14.    curfile="$0"  
  15. else    
  16.    curfile="$PWD/${0#./}"  
  17. fi  
  18. php_path=`dirname $curfile`  
  19. #yiicmd.php所在目录  
  20.   
  21.   
  22. phpCmdDir=`dirname $php_path`</strong>  
  23. </span>  
  24.   
  25. #yii命令行都是执行此php  
  26. phpCmdName="yiicmd.php"  
  27.   
  28.   
  29. # 配置监控的程序及对应的监控频率时间及允许启动的线程数  
  30. <strong><span style="color: #ff0000;">shconfig[0]="drawresult"  
  31. shtime[0]=600  
  32. shconfig[1]="kkdrawresult"  
  33. shtime[1]=600</span>  
  34. </strong>  
  35.   
  36.   
  37.   
  38.   
  39. LOG_START_TIME=`date +'%Y-%m-%d %H:%M:%S'`  
  40. echo " " >> $LOG_PATH   
  41. echo "monitor.sh run start...... time : $LOG_START_TIME" >> $LOG_PATH   
  42.   
  43.   
  44. #下面这里不用改路径  
  45. IP=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`  
  46.   
  47. #当前进程数  
  48. MAX_THREAD=4  
  49. CUR_THREAD=0  
  50. CUR_SERVER=0  
  51.   
  52. # 循环取配置的各个进程一个个检查并关闭  
  53. i=0  
  54. for index in "${shconfig[@]}"  
  55. do  
  56.   
  57.     echo "check ${phpCmdDir} ${phpCmdName} ${index} thread......" >> $LOG_PATH   
  58.     #线程数  
  59.     # 判断是不是有重复进程,保证一台电脑上只有一个进程  
  60.     counter=`ps -ef | grep "${phpCmdDir}${phpCmdName} ${index}" | grep -v grep | wc -l`  
  61.     if [ $counter -gt 1 ]; then  
  62.         echo "kill mulithreed ${phpCmdDir}${phpCmdName} ${index}" >> $LOG_PATH   
  63.         ps -ef | grep "${phpCmdDir}${phpCmdName} ${index}" | grep -v "grep" | awk '{print $2}'|xargs kill  
  64.         sleep 1  
  65.     fi  
  66.       
  67.     #检查进程 <strong><span style="color: #ff0000;">拉起进程</span>  
  68. </strong>  
  69.   
  70.     if [ $counter -eq 0 ]; then  
  71.         echo "<strong><span style="color: #ff0000;">run  ${phpCmdDir}${phpCmdName} ${index}</span>  
  72. </strong>  
  73. " >> $LOG_PATH   
  74.         ${run_php_path} ${phpCmdDir}${phpCmdName} ${index} &  
  75.         continue 1  
  76.     fi  
  77.   
  78.     last_time=`date +%s`  
  79.     FILENAME="/var/www/logs/${index}${CUR_THREAD}.time"  
  80.     echo  "${FILENAME}" >>$LOG_PATH   
  81.     if [ -e $FILENAME ]  
  82.     then  
  83.         last_time="`cat ${FILENAME}`"  
  84.     else  
  85.         last_time=0  
  86.     fi  
  87.   
  88.     if [ -z $last_time ]  
  89.     then  
  90.       last_time=0  
  91.     fi  
  92.     current_time=`date +%s`  
  93.     let "diff_time = current_time - $last_time "  
  94.     echo "${current_time} ${last_time} = ${diff_time} > ${shtime[i]}" >> $LOG_PATH  
  95.   
  96.     # 如果时间超过50秒,重启  
  97.     if [ "$diff_time" -ge "${shtime[i]}" ]  
  98.        then  
  99.   
  100.         # 关闭此进程      
  101.         echo "stop $index......" >> $LOG_PATH   
  102.         chpid="`cat /var/www/logs/${index}.sid`";  
  103.         kill $chpid;  
  104.           
  105.         echo "kill ${phpCmdDir}${phpCmdName} ${index} done!" >> $LOG_PATH   
  106.         ps ax|grep "${phpCmdDir}${phpCmdName} ${index}" |grep -v grep|awk '{print $1}'|xargs kill  
  107.           
  108.         # 休眠两秒后再启动服务  
  109.         sleep 2  
  110.         echo "restart ${phpCmdDir}${phpCmdName} ${index}......" >> $LOG_PATH   
  111.         echo "${run_php_path} ${phpCmdDir}${phpCmdName} ${index}" >> $LOG_PATH   
  112.           
  113.         ${run_php_path} ${phpCmdDir}${phpCmdName} ${index} &  
  114.         sleep 1  
  115.           
  116.         shpid="$!";  
  117.         echo "$shpid" > /var/www/logs/${index}.sid         
  118.         echo "success restart $index......" >> $LOG_PATH   
  119.     fi  
  120.     i=$(($i+1))  
  121. done  
  122. LOG_END_TIME=`date +'%Y-%m-%d %H:%M:%S'`  
  123. echo "monitor.sh run end......time: $LOG_END_TIME" >> $LOG_PATH  
  评论这张
 
阅读(698)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018