Linux下实现tomcat线程监控并自启

应用场景

  CENTOS服务器运行tomcat服务器,为了保证服务器正常运行并实现崩溃自启,通过系统自带的crontab执行定时.sh脚本任务,对tomcat系统进行检测,tomcat崩溃,自动重启服务。


快速开始

  1.  准备环境:CentOS Linux release 7.2、apache-tomcat-8.5.15、能够运行的项目一份
  2. 查看crontab是否安装,crontab命令用于linux和unix一般情况下,用于周期性执行指令。linux发行版本都已经预安装了cron工具。如果未安装,可以使用以下命令进行安装。
    yum install -y vixie-cron
  3. 使用crontab的相关命令:
    service crond start//启动服务
    
    service crond status//查看状态
    
    service crond restart//重启服务
    
    service crond reload//重新载入配置
  4. 编写shell脚本,用于监控tomcat线程并处理逻辑:

        分析:首先我们应该查看tomcat线程ID,如果线程ID不存在,则重启tomcat服务器,如果存在,则我们请求项目,这个请求可以是项目的一个页面,也可以特意为项目写的一个方法,不需要任何的逻辑,只需要返回数据即可。得到请求返回的状态码status,如果返回的status==200,则说明系统运行正常,如果返回其他的状态码,则说明系统异常,将tomcat的线程杀掉并重启服务。下面是演示的shell脚本代码

#tomcat监控脚本,记录tomcat运行状况,并在系统出现异常的时候重启服务

# 获取线程ID,执行该命令,可以得到tomcat线程,grep -w用于执行单词搜索
TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat-8.5.20'|grep -v 'grep'|awk '{print $2}')

# tomcat启动的脚本文件,一般位于tomcat服务器bin目录下面
StartTomcat=/tal/apache-tomcat-8.5.20/bin/startup.sh

# 项目的一个方法,该方法只要能够请求到,则返回成功
WebUrl=http://47.92.108.67:8080/ProjectSystem/shTest

#tomcatwork空间
TomcatCache=/tal/apache-tomcat-8.5.20/work

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

#监控的代码
Monitor()
{
  #输出到日志文件,并将时间保存
  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
  #查看tomcatID,如果存在,则进入处理逻辑,如果不存在,则重启tomcat
  if [ $TomcatID ];then
    #记录日志
    echo "[info]tomcat进程ID为:$TomcatID."
    # 请求项目,$WebUrl是相应的请求地址,该命令执行之后会得到相应的线程ID
    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]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
        echo "[error]开始重启tomcat"
        #杀掉相应的进程
        kill -9 $TomcatID  # 杀掉原tomcat进程
		./email.sh
        sleep 1
	#清理work空间
        rm -rf $TomcatCache # 清理tomcat缓存
	#重启
        $StartTomcat
    fi
  else
    echo "[error]进程不存在!tomcat自动重启..."
    echo "[info]$StartTomcat,请稍候......"
    #rm -rf $TomcatCache
    $StartTomcat
  fi
  echo "------------------------------"
}
Monitor>>$TomcatMonitorLog

            5.在linux中添加定时任务,输入下面代码,然后添加定时任务每分钟执行一次

                

crontab -e 

  6.启动定时任务,则开始执行定时任务,运行截图如下:

        

日志脚本:

        

----------------------------------------------------------------------------------------------------------------------

参考文档:http://www.voidcn.com/article/p-bjawfbcq-cm.html 

                http://www.cnblogs.com/pipelone/archive/2009/04/17/1437879.html

     知识点及问题总结:

  1. 完成之后先执行脚本,脚本执行成功再加入定时任务。在尝试过程中,定时任务显示执行成功,但是脚本没有执行,手动杀掉线程之后,系统并没有重新启动。手动执行shell脚本出现异常,才知道脚本出现了问题。首先需要给脚本执行权限,具体做法是chmod 777 /usr/xxx.sh;chmod的意思是修改文件权限。其次我的脚本是在windows下生成,通过xftp上传到服务器,需要转换,试用命令set ff即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要在Linux上设置Tomcat开机自启,可以按照以下步骤进行操作: 1. 打开Tomcat的启动脚本,通常位于Tomcat安装目录下的bin目录中,例如:/opt/tomcat/bin/catalina.sh。 2. 在脚本中找到以下代码: # ----- Execute The Requested Command ----------------------------------------- case "$1" in start) shift if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" shift exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Djava.security.manager \ -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&" else exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Djava.security.manager \ -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&" fi 3. 在该代码块的末尾添加以下内容: # ----- Set Tomcat to auto-start on boot -------------------------------------- if [ -f /etc/rc.d/init.d/functions ]; then # RedHat based systems echo "Adding Tomcat to chkconfig" /sbin/chkconfig --add tomcat /sbin/chkconfig --level 345 tomcat on elif [ -f /etc/init.d/functions ]; then # Debian based systems echo "Adding Tomcat to update-rc.d" /usr/sbin/update-rc.d -f tomcat defaults fi 4. 保存并关闭文件。 5. 授予启动脚本执行权限,例如:chmod +x /opt/tomcat/bin/catalina.sh。 6. 将Tomcat添加到系统服务中,例如:/etc/init.d/tomcat。 7. 启动Tomcat服务,例如:/etc/init.d/tomcat start。 8. 确认Tomcat已成功启动,例如:ps -ef | grep tomcat。 9. 重启系统,确认Tomcat是否已自动启动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LayLandx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值