Chinaunix首页 | 论坛 | 博客
  • 博客访问: 807391
  • 博文数量: 94
  • 博客积分: 1767
  • 博客等级: 上尉
  • 技术积分: 1168
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 23:16
个人简介

ha

文章分类

全部博文(94)

文章存档

2014年(2)

2013年(17)

2012年(6)

2011年(15)

2010年(23)

2009年(23)

2008年(8)

我的朋友

分类: 系统运维

2013-01-24 22:57:43

转载自:http://toptree.iteye.com/blog/1750957

 

Web服务自动监控shell


我们在线上跑的服务,不知道为什么最近有几回运行的进程莫名其妙的就没有了,就特意写了这个监控脚本,让其自动扫描服务,把访问不正常的服务,自动启动或重启服务,并且导出当时的线程使用情况,方便定位问题。
 
步骤:
1.修改web服务名称和端口
monitorTcp.sh

2.修改扫描时间
monitorServer.sh

3.启动守候进程
/usr/bin/nohup /bin/sh /home/Gzh/shell/monitorServer.sh 2>&1 > /dev/null &

monitorServer.sh:
#!/bin/sh 
########################################################### 
#desc:后台守候检查服务是否正常 
#author:gaozhonghui 
#mail:toptreegzh@163.com 
#date:20121210 
########################################################### 
 
while true 
do 
   /bin/sh /home/Gzh/shell/monitorTcp.sh > /dev/null 2>&1 
   sleep 10 
done 
 

monitorTcp.sh:
#!/bin/sh 
##################################################### 
#desc:扫描后台服务器的应用服务器,若不能正常访问则重启 
#author:gaozhonghui 
#mail: 
#date:20121127 
####################################################### 
 
year=`date -d "today" +"%Y"` 
monthday=`date -d "today" +"%m"` 
date=$(date -d "today" +"%Y%m%d") 
 
#被监控服务器、端口列表 
#str = web服务文件夹:端口号 
server_all_list=( 
    '' 
    '' 

 
#应用服务器基路径 
serverBasePath="/web/webserver/jboss/" 
#日志路径 
logBasePath="/web/webserver/logs/$year/$monthday/" 
 
#获得监控服务PID 
function_getPID(){ 
   local PID=`ps -ef|grep $1|grep java |awk '{print $2}'` 
   echo $PID 

 
#dump 线程详细信息方便定位问题 
function_jstackinfo(){ 
 PID=`function_getPID $1` 
 if [ x$PID != x"" ] ;then 
    if [ ! -d ${logBasePath} ];then 
       mkdir -p ${logBasePath}       
    fi 
 
    jstack -l ${PID} >> ${logBasePath}"jstack_$1_${date}.log"  
 fi 

 
#关闭应用服务 
function_shutdown(){ 
  local shutdownSh=${serverBasePath}$1"/bin/shutdown.sh" 
  if [ -f $shutdownSh ];then 
        local PID=`function_getPID $1` 
 
        if [ x$PID != x"" ] ;then 
                sh $shutdownSh > /dev/null 2>&1 
                sleep 2 
        fi 
 
        local PID2=`function_getPID $1` 
 
        if [ x$PID2 != x"" ];then 
                kill -9 $PID2 
        fi 
  fi     

 
#启动应用服务 
function_startup(){ 
 local startupSh=${serverBasePath}$1"/bin/startup.sh" 
 if [ -f $shutdownSh ];then 
    sh $startupSh > /dev/null 2>&1 
 fi 

 
#重启应用服务 
function_restart(){ 
  function_shutdown $1 
  sleep 5 
  function_startup $1 

 
#扫描监控服务 
for server in ${server_all_list[@]}; do 
   server_ip=127.0.0.1 
   server_name=$( echo ${server} | awk -F ':' '{print $1}') 
   server_port=$( echo ${server} | awk -F ':' '{print $2}') 
    
   #status:    0,http down    1,http ok    2,http down but ping ok  
   if nc -vv -z -w 2 $server_ip $server_port > /dev/null 2>&1;then 
       status=1 
   else 
       if nc -vv -z -w 3 $server_ip $server_port > /dev/null 2>&1;then 
           status=1 
       else 
           if ping -c 1 $server_ip > /dev/null 2>&1;then 
               status=2 
           else 
               status=0 
           fi 
       fi 
   fi 
     
   if [ x$status != x"1" ];then 
    PID=`function_getPID  ${server_name}` 
     
    if [ x$PID != x ];then 
        function_jstackinfo  ${server_name} 
        function_restart  ${server_name} 
    else 
        function_startup ${server_name} 
    fi   
   fi 
     
done 

阅读(3028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~