应用场景
CENTOS服务器运行tomcat服务器,为了保证服务器正常运行并实现崩溃自启,通过系统自带的crontab执行定时.sh脚本任务,对tomcat系统进行检测,tomcat崩溃,自动重启服务。
快速开始
- 准备环境:CentOS Linux release 7.2、apache-tomcat-8.5.15、能够运行的项目一份
- 查看crontab是否安装,crontab命令用于linux和unix一般情况下,用于周期性执行指令。linux发行版本都已经预安装了cron工具。如果未安装,可以使用以下命令进行安装。
yum install -y vixie-cron
- 使用crontab的相关命令:
service crond start//启动服务 service crond status//查看状态 service crond restart//重启服务 service crond reload//重新载入配置
- 编写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
知识点及问题总结:
- 完成之后先执行脚本,脚本执行成功再加入定时任务。在尝试过程中,定时任务显示执行成功,但是脚本没有执行,手动杀掉线程之后,系统并没有重新启动。手动执行shell脚本出现异常,才知道脚本出现了问题。首先需要给脚本执行权限,具体做法是chmod 777 /usr/xxx.sh;chmod的意思是修改文件权限。其次我的脚本是在windows下生成,通过xftp上传到服务器,需要转换,试用命令set ff即可。