遇到的问题1:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined(没有配环境变量)
问题2:判断TOMCAT进程是否存在 if [ -n “$TomcatID” ];then
问题3:bash: ./cmd.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录
原因是:MACOS WINDOWS LINUX下的换行符,
造成在linux下无法识别正确的换行符。
解决办法: sed -i ‘s/\r$//’ monitor.sh
脚本如下:
#!/bin/sh
自动监控tomcat脚本并且执行重启操作
#定义环境变量 (要改成自己的jdk相关地址)
1
2
3
4
5
6 1PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk/jdk1.8.0_201/bin
2export JAVA_HOME=/usr/local/jdk/jdk1.8.0_201
3export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
4export PATH=$PATH:$JAVA_HOME/bin
5
6
获取tomcat进程ID(其中[grep -w ‘tomcat’]代码中的tomcat需要替换为你的tomcat文件夹名)
1
2
3 1TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
2
3
tomcat启动程序(这里注意tomcat实际安装的路径)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 1StartTomcat=/usr/local/apache-tomcat-8.5.39/bin/startup.sh
2TomcatCache=/usr/local/apache-tomcat-8.5.39/work
3
4#定义要监控的页面地址
5WebUrl=https://ip:8080/
6
7#日志输出
8GetPageInfo=/tmp/TomcatMonitor.Info
9TomcatMonitorLog=/tmp/TomcatMonitor.log
10
11
12Monitor () {
13 echo "[info] 开始监控地址:$WebUrl [$(date +'%F %H:%M:%S')]"
14 if [ -n "$TomcatID" ];then # 这里判断TOMCAT进程是否存在
15 echo "[info] 当前tomcat进程ID为:$TomcatID,继续检测页面..."
16 # 检测是否启动成功(成功的话页面会返回状态"200")
17 TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
18 if [ $TomcatServiceCode -eq 200 ];then
19 echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,测试正常......"
20 else
21 echo "[error]tomcat出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$TomcatMonitorLog[error],开始重启tomcat"
22 #杀掉原tomcat进程
23 kill -9 $TomcatID
24 sleep 3
25 #清理tomcat缓存
26 rm -rf $TomcatCache
27 $StartTomcat
28 fi
29 else
30 echo "[error]tomcat进程不存在!tomcat开始自动重启......[info]$StartTomcat,请稍候......"
31 rm -rf $TomcatCache
32 $StartTomcat
33 fi
34 echo "编写完成"
35 }
36
37Monitor>>$TomcatMonitorLog`在这里插入代码片`
38
39