项目上线之后,tomcat服务器有时候会莫名其妙的挂掉,利用shell写一个看门狗程序,监测tomcat异常关闭后,重启服务器。
1:新建脚本文件,赋予权限
touch start.sh
chmod 755 start.sh
2:编写脚本文件
#!/bin/sh
# 自动监控tomcat并且在异常时执行重启操作
# 定义java环境变量
export JAVA_HOME=/usr/local/myApp/jdk1.8
# 获取端口号为8080的tomcat进程ID(考虑到有多个tomcat服务器,用8080关键词)
# grep -v grep 排除grep命令自带的进程id
# awk '{print $2}' 只保留结果中第二列的值
pid=$(ps -ef |grep 8080|grep -v grep|awk '{print $2}')
# tomcat启动脚本
start=/usr/local/myApp/tomcat8080/bin/startup.sh
# tomcat缓存
cache=/usr/local/myApp/tomcat8080/work
# tomcat链接地址
url=http://localhost:8080
# 监控时的日志输出
log=/tmp/my.log
#linux垃圾回收站
hole=/dev/null
function doIt()
{
if [ $pid ]
then
echo "tomcat进程ID存在"
code=$(curl -s -o $hole -m 10 --connect-timeout 10 $url -w %{http_code}"\n") #测试链接是否可以正常访问
if [ $code -eq 200 ]
then
echo "测试链接正常"
else
echo "测试链接失败,重启tomcat"
kill -9 $pid # 杀掉进程
sleep 5
#rm -rf $cache # 清理tomcat缓存
$start
fi
else
echo "tomcat进程id不存在,重启中...."
#rm -rf $cache #清除缓存,tomcat跑的项目大的话,慎用,可能会出现意想不到的问题,
$start
fi
echo "------------------------------"
}
doIt>>$log #执行函数,并打印日志
3:设置定时执行start.sh文件
crontab -e
添加内容:
*/30 * * * * /tmp/mySh/start.sh #每30分钟执行一次
4:启动定时任务
service crond start #启动定时任务
service crond status #查看状态
service crond restart #重启定时任务
service crond stop #停止定时任务
5:查看定时任务
crontab -l
注意:
1.某些自己用yum install xxx安装的系统命令,在shell脚本文件执行时可能会失效,这时候使用
which xxx 查看命令的安装目录,然后在shell脚本文件中使用绝对路径就ok了
2.你的脚本名称不能包含获取pid那一句命令中使用的关键字
比如:pid=$(ps -ef |grep 8080|grep -v grep|awk '{print $2}') 那么你的脚本名称不可以包含8080关键字,否则会出问题。
参考文章:https://blog.csdn.net/zzq900503/article/details/50723191