监控Tomcat服务状态和日志没有更新自动重启的Shell脚本

监控Tomcat状态与日志并自动重启脚本

这个脚本的主要功能是监控Tomcat服务的运行状态,它会:

  1. 检查Tomcat进程是否运行
  2. 检查Tomcat日志文件是否在最近2小时内更新过
  3. 如果Tomcat未运行或日志超过2小时未更新,会自动重启Tomcat服务
  4. 所有操作都会记录到指定的日志文件中

脚本通过比较时间戳来判断日志是否更新,使用Unix时间戳(秒数)进行计算,确保判断准确。

#!/bin/bash
# 定义环境变量
PATH=/opt/java/jdk1.8.0_91/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH  # 设置系统PATH环境变量
export LANG=zh_CN.UTF-8  # 设置系统语言为中文UTF-8
#export PATH=$PATH:$JAVA_HOME/bin  # 注释掉的JAVA_HOME路径设置

# 获取当前日期和时间
curdate=`date +%Y-%m-%d`  # 当前日期,格式:YYYY-MM-DD
curtime=`date +%Y-%m-%d' '%H:%M:%S`  # 当前完整时间,格式:YYYY-MM-DD HH:MM:SS
#logcurtime= `stat catalina.2019-10-11.out | awk   -F " "  'NR==6 {print $2" "$3}' |  awk   -F "." '{print $1}'`  # 注释掉的旧代码

curStamp=`date -d "$curtime" +%s`  # 将当前时间转换为Unix时间戳(秒数)

# 定义日志文件路径,使用当前日期命名
logsdir="/data/logs/tomcat-test/catalina.$curdate.out"
# 获取日志文件最后修改时间,并格式化为标准时间格式
logcurtime=`stat $logsdir | awk -F " " 'NR==6 {print $2" "$3}' | awk -F "." '{print $1}'`
logStamp=`date -d "$logcurtime" +%s`  # 将日志修改时间转换为Unix时间戳

jklogdir="/opt/wasu/jkshell/jklog.log"  # 监控脚本自身的日志文件路径
exdir="/opt/tomcat-test/bin"  # Tomcat的bin目录路径

# 定义监控函数
Monitor() 
{
    # 获取Tomcat进程ID
    psid=`ps auwx | grep "tomcat-test/bin/bootstrap" | grep -v "grep" | awk '{print $2}'`
    
    # 记录监控信息到日志文件
    echo "############## current date is $curtime ###################" >>$jklogdir
    echo "被监控日志: $logsdir" >>$jklogdir
    echo "############## 日志更新时间 is $logcurtime ###################" >>$jklogdir
    echo "tomcat id : $psid" >>$jklogdir
    echo "当前时间戳: $curStamp" >>$jklogdir
    echo "日志更新时间戳:$logStamp" >>$jklogdir
    
    # 计算日志时间+2小时(7200秒)的时间戳
    #timeval=`expr $logStamp + 10`  # 注释掉的测试代码(只加10秒)
    timeval=`expr $logStamp + 7200`  # 实际使用的2小时阈值
    echo "日志时间+7200: $timeval" >> $jklogdir
    
    # 检查Tomcat进程是否存在
    if [ "$psid" = "" ]; then
    {
        echo " tomcat-test pid is not alive" >>$jklogdir
        #mv nohup.out nohup.out_$curtime  # 注释掉的备份命令
        
        # 如果Tomcat未运行,则启动它
        cd $exdir 
        ./startup.sh  # 执行启动脚本
        sleep 5  # 等待5秒
        
        # 再次获取进程ID并记录
        psid=`ps auwx | grep "tomcat-test/bin/bootstrap" | grep -v "grep" | awk '{print $2}'`
        echo "tomcat id $psid" >>$jklogdir
        echo "now service start " >>$jklogdir
    }
    else
        # 如果Tomcat正在运行,检查日志文件是否存在或是否超过2小时未更新
        if [ ! -f $logsdir -o $curStamp -gt $timeval ]; then 
        { 
            echo "日志超过2小时没有更新;" >>$jklogdir
            kill -9 $psid  # 强制杀死Tomcat进程
            echo "KILL $psid;" >>$jklogdir
            echo "now service stop success" >>$jklogdir
            sleep 10  # 等待10秒
            
            # 重新启动Tomcat
            #mv nohup.out nohup.out_$curtime  # 注释掉的备份命令
            cd $exdir 
            ./startup.sh
            sleep 5  # 等待5秒
            
            # 记录新进程ID
            psid=`ps auwx | grep "tomcat-test/bin/bootstrap" | grep -v "grep" | awk '{print $2}'`
            echo "new tomcat id $psid" >>$jklogdir
            echo "now service start success" >>$jklogdir
        }
        else 
            # 如果一切正常,记录"do nothing"
            echo "执行结果:do noting" >>$jklogdir
        fi
    fi
}

# 执行监控函数
Monitor;
exit;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值