• 检测Tomcat日志异常自动重启


    检测Tomcat日志关键字异常

    日常工作中经常会遇到Tomcat日志报特定的错误导致 Linux 服务器CPU暴涨,这时候需要重启应用才可以降下来

    所以就需要写一个shell脚本,报出特定的错误就重启应用

    shell脚本如下:

    [root@Mike-VM-Node-10_10_0_188 ~]# vim /app/scripts/auto-restart.sh

    #!/bin/sh # tomcatdir=( tomcat-9.0.19-app-8080 ) sys_log=catalina.`date +%Y-%m-%d`.out err_log=/app/scripts/err.log err_time=`date +%Y-%m-%d_%H:%M` restart_log=/app/scripts/restart-system.log for ((i=0;i<${#tomcatdir[*]};i++)) do grep -E -i "Connection is not available|java.lang.OutOfMemoryError" /app/${tomcatdir[$i]}/logs/$sys_log > $err_log if [ -s $err_log ];then echo ${err_time}_${tomcatdir[$i]}"_内存溢出或者连接池问题自动重启" >> $restart_log mv /app/${tomcatdir[$i]}/logs/$sys_log /app/${tomcatdir[$i]}/logs/${err_time}.out /etc/init.d/${tomcatdir[$i]} restart # else # echo ${err_time}_${tomcatdir[$i]}"_没有连接池异常" >> $restart_log fi done

    需要在/etc/init.d/下创建一个重启脚本

    重启脚本如下:

    [root@Mike-VM-Node-10_10_0_188 ~]# vim /etc/init.d/tomcat-9.0.19-app-8080
    
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tomcat
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: tomcat-server daemon
    # Description:       tomcat-server daemon
    ### END INIT INFO
    #
    # chkconfig: - 95 15
    # description: Tomcat start/stop/status script
    
    #Location of JAVA_HOME (bin files)
    export JAVA_HOME=/app/jdk8
    
    #Add Java binary files to PATH
    export PATH=$JAVA_HOME/bin:$PATH
    
    #CATALINA_HOME is the location of the configuration files of this instance of Tomcat
    CATALINA_HOME=/app/tomcat-9.0.19-app-8080
    
    #TOMCAT_USER is the default user of tomcat
    TOMCAT_USER=root
    
    #TOMCAT_USAGE is the message if this script is called without any options
    TOMCAT_USAGE="Usage: $0 {e[00;32mstarte[00m|e[00;31mstope[00m|e[00;32mstatuse[00m|e[00;31mrestarte[00m}"
    
    #SHUTDOWN_WAIT is wait time in seconds for java proccess to stop
    SHUTDOWN_WAIT=10
    
    tomcat_pid() {
      echo `ps -ef | grep ${CATALINA_HOME}/conf | grep -v grep | tr -s " "|cut -d" " -f2`
    }
    
    start() {
      pid=$(tomcat_pid)
      if [ -n "$pid" ]; then
        echo -e "e[00;31mTomcat is already running (pid: $pid)e[00m"
      else
        echo -e "e[00;32mStarting tomcate[00m"
        if [ `user_exists $TOMCAT_USER` = "1" ]; then
          su $TOMCAT_USER -c $CATALINA_HOME/bin/startup.sh
        else
          $CATALINA_HOME/bin/startup.sh
        fi
        status
      fi
      return 0
    }
    
    status() {
      pid=$(tomcat_pid)
      if [ -n "$pid" ]; then
        echo -e "e[00;32mTomcat is running with pid: $pide[00m"
      else
        echo -e "e[00;31mTomcat is not runninge[00m"
      fi
    }
    
    stop() {
      pid=$(tomcat_pid)
      if [ -n "$pid" ]; then
        echo -e "e[00;31mStoping Tomcate[00m"
    
        $CATALINA_HOME/bin/shutdown.sh
    
        let kwait=$SHUTDOWN_WAIT
        count=0;
        until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
        do
          echo -n -e "e[00;31mwaiting for processes to exite[00m
    ";
          sleep 1
          let count=$count+1;
        done
    
        if [ $count -gt $kwait ]; then
          echo -n -e "
    e[00;31mkilling processes which didn't stop after $SHUTDOWN_WAIT secondse[00m"
          kill -9 $pid
        fi
      else
        echo -e "e[00;31mTomcat is not runninge[00m"
      fi
    
      return 0
    }
    
    user_exists() {
      if id -u $1 >/dev/null 2>&1; then
        echo "1"
      else
        echo "0"
      fi
    }
    
    case $1 in
      start)
        start
        ;;
      stop)
        stop
        ;;
      restart)
        stop
        start
        ;;
      status)
        status
        ;;
      *)
        echo -e $TOMCAT_USAGE
        ;;
    esac
    exit 0
    [root@Mike-VM-Node-10_10_0_188 ~]# chmod +x /etc/init.d/tomcat-9.0.19-app-8080

    再设置定时任务就大功告成

    [root@Mike-VM-Node-10_10_0_188 ~]# crontab -e
    
    */1 * * * * /bin/sh /app/scripts/auto-restart.sh
    [root@Mike-VM-Node-10_10_0_188 ~]#

    每分钟检测一次有没有报特定的错误,有就重启

    本文分享完毕,感谢支持点赞~~

  • 相关阅读:
    javascsript 去除数组重复数据
    javascript监听事件兼容
    javascript紧接上一张for循环的问题,我自己的理解
    javascript解决for循环中i取值的问题(转载)
    javascript 模仿 html5 placeholder
    javascript构造函数+原形继承+作用域扩充
    css画下图
    jquery商城类封装插件
    JEECG01-开发入门环境搭建成功
    Perl学习笔记(九)--文件(四)
  • 原文地址:https://www.cnblogs.com/mike666/p/14962137.html
Copyright © 2020-2023  润新知