Linux系统中,自动监控Tomcat,Jar服务并且在异常时执行重启操作(CentOS 7)
1.关于Tomcat服务
创建文件autoStart.log(用来存储日志信息),并赋予权限:
touch autoStart.log
chmod 777 autoStart.log
创建脚本autoStart.sh,并赋予权限:
touch autoStart.sh
chmod 777 autoStart.sh
编写autoStart.sh脚本相关代码:
# !/bin/sh
# 自动监控Tomcat并且在异常时执行重启操作
# @author:小辰哥哥
# (1)定义Java环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_131
# (2)相关属性详解
# grep -w 'tomcat' 代码中的tomcat需要替换为自己的tomcat文件夹名(确保唯一性)
# grep -v 'grep' 为了去除包含grep的进程行,避免影响最终数据的正确性
# awk '{print $2}' 只保留结果中第二列的值
pid=$(ps -ef |grep tomcat |grep -w 'apache-tomcat-8.5.35'|grep -v 'grep'|awk '{print $2}'|awk 'NR == 1')
# (3)Tomcat启动脚本
start=/home/zhouziyu/Work/apache-tomcat-8.5.35/bin/startup.sh
# (4)Tomcat缓存
cache=/home/zhouziyu/Work/apache-tomcat-8.5.35/work
# (5)Tomcat链接地址(Https会失败)
url=http://localhost:8087
# (6)监控时的日志输出
log=/home/zhouziyu/Work/autoStart.log
# (7)linux垃圾回收站
hole=/dev/null
function doIt()
{
if [ $pid ]
then
echo "Tomcat进程ID存在:$pid"
# 测试链接是否可以正常访问
# -I 仅测试HTTP头
# -m 10 最多查询10s
# -o /dev/null 屏蔽原有输出信息
# -s silent
# -w %{http_code} 控制额外输出
code=$(curl -s -o $hole -m 10 --connect-timeout 10 $url -w %{http_code}"\n")
if [ $code -eq 200 ]
then
echo "测试链接正常,Tomcat状态正常"
else
echo "测试链接失败,重启Tomcat:$code"
# 杀掉进程
kill -9 $pid
sleep 5
# 清除缓存,tomcat跑的项目大的话,慎用,可能会出现意想不到的问题
# 清理Tomcat缓存
# rm -rf $cache
$start
fi
else
echo "Tomcat进程ID不存在,重启中...."
# 清除缓存,tomcat跑的项目大的话,慎用,可能会出现意想不到的问题
# rm -rf $cache
$start
fi
starttime=$(date +%Y-%m-%d\ %H:%M:%S)
echo "当前服务器时间:$starttime"
echo "####################################"
}
# (8)执行函数,并打印日志
doIt>>$log
查看当前Tomcat进程状态:
# 注意:3626是apache-tomcat-8.5.99的进程号
ps -ef|grep tomcat
编写定时任务(然后保存退出):
crontab -e
*/1 * * * * /home/zhouziyu/Work/autoStart.sh #每1分钟执行一次
观察日志信息:
cat autoStart.log
Tomcat可以正常访问:
再次观察日志信息:
再次查看Tomcat进程状态:
2.关于Jar服务
创建文件autoStart2.log(用来存储日志信息),并赋予权限:
touch autoStart2.log
chmod 777 autoStart2.log
创建脚本autoStart(Jar).sh,并赋予权限:
touch autoStart(Jar).sh
chmod 777 autoStart(Jar).sh
编写autoStart(Jar).sh脚本相关代码:
# !/bin/sh
# 自动监控Jar服务并且在异常时执行重启操作
# @author:小辰哥哥
# (1)相关属性详解
# grep -w 'java' 代码中的java需要替换为自己的Jar文件名(确保唯一性)
# grep -v 'grep' 为了去除包含grep的进程行,避免影响最终数据的正确性
# awk '{print $2}' 只保留结果中第二列的值
pid=$(ps -ef |grep java |grep -w 'operate-ticket-0.0.1-SNAPSHOT.jar'|grep -v 'grep'|awk '{print $2}'|awk 'NR == 1')
# (2)Jar启动脚本
start=nohup /usr/local/java/jdk1.8.0_131/bin/java -jar /home/zhouziyu/Work/operate-ticket-0.0.1-SNAPSHOT.jar > jar.log &
# (3)Jar接口测试地址(Https会失败)
url=http://192.168.8.108:9090/OperateTicket/StandardController/test
# (4)监控时的日志输出
log=/home/zhouziyu/Work/autoStart2.log
# (5)linux垃圾回收站
hole=/dev/null
function doIt()
{
if [ $pid ]
then
echo "Jar服务进程ID存在:$pid"
# 测试链接是否可以正常访问
# -I 仅测试HTTP头
# -m 10 最多查询10s
# -o /dev/null 屏蔽原有输出信息
# -s silent
# -w %{http_code} 控制额外输出
code=$(curl -s -o $hole -m 10 --connect-timeout 10 $url -w %{http_code}"\n")
if [ $code -eq 200 ]
then
echo "测试链接正常,Jar服务状态正常"
else
echo "测试链接失败,重启Jar服务:$code"
# 杀掉Java服务进程
kill -9 $pid
sleep 5
$start
fi
else
echo "Jar服务进程ID不存在,重启中...."
$start
fi
starttime=$(date +%Y-%m-%d\ %H:%M:%S)
echo "当前服务器时间:$starttime"
echo "####################################"
}
# (6)执行函数,并打印日志
doIt>>$log
查看当前Jar服务进程状态:
# 注意:并不存在Jar服务的进程号
ps -ef|grep java
编写定时任务(然后保存退出):
crontab -e
*/1 * * * * /home/zhouziyu/Work/autoStart(Jar).sh #每1分钟执行一次
观察日志信息:
cat autoStart2.log
访问接口:
再次观察日志信息:
再次查看Jar服务进程状态:
总结
每天一个提升小技巧!!!