检测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 ~]#
每分钟检测一次有没有报特定的错误,有就重启
本文分享完毕,感谢支持点赞~~