Ubuntu Tomcat服务器设置自动重启,定时检查崩溃后重启

Ubuntu部署tomcat服务器后,经常会因为一些bug导致服务器挂掉,如果不设置自动重启,每次服务器挂掉都不知道,发现后还要手动重启,严重影响生产。
解决办法就是让系统定时检查服务是否正常运行,若运行不正常则去重启服务。


在Ubuntu服务器系统中,存在一个crontab的定时服务,我们可以使用crontab来创建定时任务。
建议将定时任务创建在root用户下。

crontab使用帮助:

  1. crontab -e 编辑crontab服务文件
  2. crontab -l 查看该用户下的crontab服务是否创建成功
  3. crontab -u 设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  4. crontab -r 删除没个用户的cron服务

crontab任务基本格式:

minute hour day month dayofweek command
如:42 4 1 * * root run-parts /etc/cron.monthly

minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
command — 要执行的命令(命令可以是ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。
正斜线(/)可以用来指定间隔频率。在范围后加上 /2 意味着在范围内可以跳过 2。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

crontab的使用就介绍至此,下来进入主题(设置检查服务器崩溃并重启的定时任务)。

第一步:创建任务脚本
在任意目录下,新建脚本文件monitor.sh:

#!/bin/sh

#定义环境变量(要改成自己的jdk相关地址)
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/jvm/java/bin
export JAVA_HOME=/usr/lib/jvm/java
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 获取tomcat进程ID,其中“tomcatDir”要改成自己的tomcat安装目录的文件夹名称
TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcatDir'|grep -v 'grep'|awk '{print $2}')
# tomcat启动程序(这里注意要改成自己tomcat实际安装的路径)
StartTomcat=/usr/local/tomcat/bin/startup.sh
TomcatCache=/usr/local/tomcat/work
# 自己定义要监控的页面地址,页面越简单越好,比如:页面上写个success即可 
WebUrl=http://ip:port/test.html
# 日志输出 (自己定义地址,用于输出监控日志和监控报错日志)
TomcatMonitorLog=/usr/local/tomcat/logs/TomcatMonitor.log
GetPageInfo=/usr/local/tomcat/logs/PageInfo.log
go(){
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
#判断tomcat进程是否存在
if [ $TomcatID ]
then
    echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
    # 检测是否启动成功(成功的话页面会返回状态"200")  
    TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
    if [ $TomcatServiceCode -eq 200 ]
    then
        echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"
    else
        echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
        echo "[error]页面访问出错,开始重启tomcat"
        kill -9 $TomcatID  # 杀掉原tomcat进程  
        #sleep 3
        #rm -rf $TomcatCache # 清理tomcat缓存  
        #$StartTomcat  
    fi
else
    echo "[error]tomcat进程不存在!tomcat开始自动重启..."
    echo "[info]$StartTomcat,请稍候......"
    #rm -rf $TomcatCache
    $StartTomcat
fi
echo "------------------------------"
}
go>>$TomcatMonitorLog

第二步:测试脚本文件

  1. 先关闭启动的Tomcat服务(用来测试脚本是否可以检测到服务未启动而重启)
  2. 转到monitor.sh所在目录,并以管理员权限运行脚本文件。$ sudo sh monitor.sh

第三步:添加定时任务

  1. 执行命令$ sudo crontab -e编辑root用户下的定时任务文件
  2. 在文件中写入:*/10 * * * * /usr/local/monitor.sh间隔10分钟执行一次monitor.sh脚本
  3. 保存并退出。

第四步:关闭Tomcat服务,等待任务是否生效(若生效,Tomcat服务会被自动启动)


本人技术能力有限,往大牛路过多多指点。

你可能感兴趣的:(系统及运维,java技术)