目录
测试方法:先kill掉进程,执行脚本,测试系统挂掉系统是否会重启,
在系统运行情况下执行脚本,查看是否会出现其他问题,没有问题再将脚本加入到定时任务。
1.安装插件
# 安装lsof脚本主要获取进程id,使用ps -ef 可能会获取多个
yum install lsof
2.运行脚本
#!/bin/sh
source /etc/profil
# 获取tomcat进程ID
TomcatID=$(lsof -i :9081)
# tomcat启动程序(这里注意tomcat实际安装的路径)
StartTomcat=/app/apache-tomcat-8.5.42/bin/startup.sh
# 定义要监控的接口返回地址
WebUrl=http://127.0.0.1:9081/interf/frontEnd/IC/IC001
# 日志输出
GetPageInfo=/app/reload/logs/TomcatMonitor.Info
TomcatMonitorLog=/app/reload/logs/TomcatMonitor.log
Monitor()
{
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在
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,TomcatID--->>$TomcatID"
kill -9 $TomcatID # 杀掉原tomcat进程
echo "kill -9 tomcat ok"
sleep 3
echo "sleep 3 ok, starting Tomcat ..."
$StartTomcat
echo "msg notify ..."
curl -d "mobile=18888888888&content=tomcat restart,place check" "http://127.0.0.1:9082/sendMsg"
fi
else
echo "[error]tomcat进程不存在!tomcat开始自动重启..."
echo "[info]$StartTomcat,请稍候......"
$StartTomcat
echo "msg notify ..."
curl -d "mobile=18036364545&content=tomcat restart,place check" "http://127.0.0.1:9082/sendMsg"
fi
echo "------------------------------"
}
Monitor>>$TomcatMonitorLog
3.赋权
chmod a+x Monitor.sh
4.将脚本加入crontab,每两分钟执行一次
# 添加定时任务 reloadRent 两分钟启动一次
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/2 * * * * root ./etc/profile;/bin/sh /app/reload/Monitor.sh reloadRent
# 添加完定时任务后,重启crond,使改动生效
service crond restart
#任务执行日志
tail -f /var/log/cron
# 通过系统日志来查看Cron任务是否有执行过
grep "reloadRent" /var/log/cron
4.设置tomcat jdk环境变量
# 查看jdk的安装地址
# 命令1
which java
/usr/java/jdk1.8.0_271/bin/java
# 命令2 通过命令1输出内容,查看jdk的安装地址
ls -lrt /usr/java/jdk1.8.0_271/bin/java
-rwxr-xr-x 1 10143 10143 8712 9月 17 2020 /usr/java/jdk1.8.0_271/bin/java
# 命令3 通过命令2输出内容,拿到jdk的实际地址
ls -lrt /usr/java/jdk1.8.0_271/bin/java
-rwxr-xr-x 1 10143 10143 8712 9月 17 2020 /usr/java/jdk1.8.0_271/bin/java
# 正常配置环境变量,定时任务运行脚本不认需要直接修改tomcat bin 目录下的setclasspath.sh 问渐渐
# export JAVA_HOME=/usr/java/jdk1.8.0_271/jre/bin/java
# export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
# export PATH=$PATH:$JAVA_HOME/bin
# 进入tomcat执行目录
cd /app/apache-tomcat-8.5.42/bin/
vi setclasspath.sh
# 在文件最上面添加
export JAVA_HOME=/usr/java/jdk1.8.0_271
export JRE_HOME=/usr/java/jdk1.8.0_271/jre
3.测试
先手动kill掉tomcat进程
运行脚本
然后将脚本添加到定时任务中,手动kill掉然后看是否会执行