lazzyRabbit hello

最近入了VPS,由于内存过小,tomcat进程经常被KILL掉,在百度之后发现可以写一个脚本来监控tomcat状态,当tomcat挂掉时,自动启动tomcat,并启用定时任务来执行它。

#下面是shell脚本

#!/bin/sh
# function:自动监控tomcat进程,挂了就执行重启操作

# 获取tomcat PPID
TomcatID=$(ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}')
# tomcat_startup
StartTomcat=/usr/local/tomcat/tomcat7/bin/startup.sh


#TomcatCache=/usr/local/tomcat/tomcat7/work

# 定义要监控的页面地址
WebUrl=http://lazyrabbit.tech/

# 日志输出
GetPageInfo=/dev/null
TomcatMonitorLog=/tmp/TomcatMonitor.log

Monitor()
{
  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
  if [ "$TomcatID" ];then
    echo "[info]tomcat进程ID为:$TomcatID."
    # 获取返回状态码
    TomcatServiceCode=$(curl -s -o /dev/null --connect-timeout 10 -m 20 $WebUrl -w %{http_code})
    if [ $TomcatServiceCode -eq 200 ];then
        echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."
    else
        echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
        echo "[error]开始重启tomcat"
        kill -9 $TomcatID  # 杀掉原tomcat进程
        sleep 3
        #rm -rf $TomcatCache # 清理tomcat缓存
        $StartTomcat
    fi
  else
    echo "[error]进程不存在!tomcat自动重启..."
    echo "[info]$StartTomcat,请稍候......"
    #rm -rf $TomcatCache
    $StartTomcat
  fi
  echo "------------------------------"
}
Monitor>>$TomcatMonitorLog

其中tomcat_startup 是tomcat启动脚本的路径,WebUrl是要监控的页面地址,使用时只需要修改它们就可以。

获取tomcat运行状态的命令

ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}'

访问页面返回状态码的命令

curl -s -o /dev/null --connect-timeout 10 -m 20 http://lazyrabbit.tech -w %{http_code}

#接下来设定定时任务

添加定时任务,每五分钟执行一次

crontab -e
*/5 * * * * /usr/local/tomcat/monitor.sh

查看定时任务

crontab -l

#可能出现的问题

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

At least one of these environment variable is needed to run this program

tomcat启动没有找到jdk环境,需要在tomcat/bin路径下的setclasspath.sh文件中配置jdk路径

export JAVA_HOME=/usr/local/java/jdk8
export JRE_HOME=/usr/local/java/jdk8/jre

/usr/local/tomcat/monitor.sh: Permission denied

这个脚本没有权限,需要设置权限

chmod 777 monitor.sh